Apache HTTP Server
2023-12-02 (土) 20:12:43
Apache HTTP Server とは †
- https://httpd.apache.org/
- 単に「Apache」と呼ばれる。
- Apache Software Foundation が提供するOSSのWebサーバ
- httpd
- クライアント1万台問題
種類 †
APR †
- Apache Portable Runtime
MPM †
- Multi-Processing Module
prefork | マルチプロセス、マルチスレッド |
worker | ハイブリッド。PHPを使う場合はこちらが推奨。大規模サイト向き |
event | マルチスレッド |
モジュール †
標準モジュール †
モジュール名 | 説明 |
mod_http | HTTPプロトコルの処理 |
mod_actions | リクエストされたファイルの形式やHTTPメソッドに連動したCGIプログラムの実行 |
mod_alias | URLとディレクトリの対応関係の設定 |
mod_asis | HTTPヘッダの追加 |
mod_autoindex | ディレクトリの一覧を作成 |
mod_cgi(mod_cgid) | CGIプログラムの実行(スレッド非対応のMPMを選択した場合はmod_cgi、スレッド対応のMPMを選択した場合はmod_cgidが組み込まれる) |
mod_deflate | データ圧縮転送 |
mod_dir | ディレクトリ名で終わるURLに標準のインデックス・ファイル名を補完 |
mod_env | CGIプログラムへの環境変数の提供 |
mod_imap | イメージ・マップ・ファイルのサポート |
mod_include | SSIの処理 |
mod_log_config | アクセスログ取得。ログの書式設定 |
mod_mime | 拡張子を使用したコンテンツ・タイプの判定 |
mod_negotiation | クライアントの情報に基づくコンテンツの自動選択 |
mod_status | Apacheの稼働状態の監視 |
mod_setenvif | クライアントの情報に基づく環境変数の設定 |
mod_userdir | 一般ユーザーのコンテンツ・ディレクトリの設定 |
アクセス制御(ホスト制限) †
- mod_access
- アクセス元のIPアドレス、ホスト名、ドメイン名などにより、アクセスの許可/拒否を判断する
アクセス制限(ユーザ認証) †
- mod_auth
- ID/パスワードの入力を促す。Basic認証、Digest認証。
DSO(Dynamic Shared Object) †
- mod_so
- DSOモジュールを読み込む。Apacheをコンパイルし直さずにモジュールの変更を行う。
拡張モジュール †
プロキシ関連機能 †
mod_proxy | プロキシ機能 |
mod_proxy_balancer | ロードバランサ機能 |
mod_proxy_http | |
mod_proxy_connect | HTTPSのCONNECTメソッドをサポートする機能 |
プロキシ関連機能(Tomcat連携) †
キャッシュ機能(サーバサイドキャッシング) †
mod_cache | キャッシュ機能を使う場合は有効にする |
mod_disk_cache | キャッシュデータをディスクに保存 |
mod_mem_cache | キャッシュデータをメモリに保存 |
mod_headers | HTTPリクエストヘッダによるキャッシング制御を使う |
キープアライブ機能 †
サードパーティーのモジュール †
アクセス制御(認証) †
- mon_auth_tkt
- mod_auth_ntlm_winbind
Apacheの構造 †
- 外部ライブラリ
- モジュール
- CORE
- OS
Apacheのリクエストトランザクション †
- リクエスト受信後
- URI変換
- ヘッダの解析
- アクセス制御
- 認証
- アクセス許可
- MIMEタイプチェック
- 微調整
- 応答
- ロギング
- 後処理
インストール †
Debian †
apt install apache2
Red Hat †
yum install httpd
ツール †
apachectl †
- Apache の設定ファイルの構文チェック
apachectl configtest
- Apache の起動・停止・再起動
apachectl start apachectl stop apachectl restart
- Apache の再起動 ※処理中のリクエストを考慮する
apachectl -k graceful apachectl -k graceful-stop
httpd ※Red Hat系 †
- バージョンの表示
httpd -version httpd -V
- モジュールを表示
httpd -M
apache2 ※Debian系 †
- バージョンの表示
apache2 -version apache2 -v apache2 -V
- モジュールを表示
apache2 -M
サイトの操作 †
a2ensite †
- 有効化
a2ensite <site-name>.conf
a2dissite †
- 無効化
a2dissite <site-name>.conf
モジュールの操作 †
a2enmod †
- 有効化
a2enmod <module-name>
a2dismod †
- 無効化
a2dismod <module-name>
設定 †
メインの設定ファイル †
- /etc/httpd/conf/httpd.conf
- /etc/apache2/apache2.conf
ServerRoot | Apache サーバのルートディレクトリ |
ServerTokens | HTTPレスポンスヘッダのサーバ情報(Server:) |
ServerSignature | エラーメッセージなどに表示されるサーバ情報 |
TraceEnable | Traceメソッドの有効化 |
DirectorySlash | |
DirectoryIndex | ルート(/)を指定して表示するファイルを指定する。複数ファイルの指定が可能。 |
Directory |
Apache がリッスンするポートの設定 †
- /etc/apache2/ports.conf
apache2ctl コマンドの環境変数の設定 †
- /etc/apache2/envvars
仮想ホストの設定 †
- /etc/apache2/sites-available/
- /etc/apache2/sites-enabled/
仮想ホスト以外の設定 †
- /etc/apache2/conf-available/
- /etc/apache2/conf-enabled/
拡張モジュールの設定 †
- /etc/apache2/mods-available/
- /etc/apache2/mods-enabled/
ディレクトリ単位で設定するファイル †
- .htaccess
- 設定ファイルが保存されているディレクトリを含めた配下のサブディレクトリに対して設定内容が適用される
ログ †
- /var/log/apache2/access.log
- /var/log/apache2/error.log
- /var/log/apache2/<hostname>_access.log
- /var/log/apache2/<hostname>_error.log
セッション情報の維持 †
スティッキーセッション方式 †
- セッション変数を永続的に利用する
- クライアント側がCookieを使わない場合、携帯端末によってはURL RewritingによりセッションIDをURLに記載する。これに対するサーバ側の対応として、URLに含まれるセッションIDを取得する。
チューニング †
MaxClients値の求め方 †
- MaxClients = 実メモリ / httpdのプロセスサイズ
- プロセスのサイズを小さくするために不要なモジュールを無効にする
- 動的コンテンツと静的コンテンツを別々のhttpdで処理する
- mod_proxyを使ってApacheをPROXYとして動作させ、別httpdのコンテンツを同一サーバのコンテンツのように見せる
セキュリティ対策 †
- HTTPリスポンスヘッダのバージョン情報を隠蔽する
- エラーページ等のデフォルトコンテンツを置き換える
- HTTPSで通信するデータを暗号化する。
関連サイト †
- ディレクティブ一覧 - Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/mod/directives.html