Apache HTTP Server の変更点


#author("2023-12-02T20:04:42+09:00","default:k1rou","k1rou")
#author("2023-12-02T20:12:43+09:00","default:k1rou","k1rou")
*Apache HTTP Server とは [#m6585f10]
-https://httpd.apache.org/
-単に「[[Apache]]」と呼ばれる。
-Apache Software Foundation が提供する[[OSS]]の[[Webサーバ]]
-httpd
-クライアント1万台問題

*種類 [#zc62c4ae]
**APR [#i4e55d89]
-Apache Portable Runtime

**MPM [#s2e74e02]
-Multi-Processing Module

|prefork |マルチプロセス、マルチスレッド |
|worker  |ハイブリッド。PHPを使う場合はこちらが推奨。大規模サイト向き |
|event   |マルチスレッド |

*モジュール [#acb1e0e9]
**標準モジュール [#p5fff89e]
|モジュール名| 説明|h
|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 |一般ユーザーのコンテンツ・ディレクトリの設定 |

***アクセス制御(ホスト制限) [#mbc6a38b]
-mod_access
--アクセス元のIPアドレス、ホスト名、ドメイン名などにより、アクセスの許可/拒否を判断する

***アクセス制限(ユーザ[[認証]]) [#g927a89b]
-mod_auth
--ID/パスワードの入力を促す。Basic認証、Digest認証。

***DSO(Dynamic Shared Object) [#wc270ef8]
-mod_so
--DSOモジュールを読み込む。Apacheをコンパイルし直さずにモジュールの変更を行う。

**拡張モジュール [#pce851cf]
***[[プロキシ]]関連機能 [#id85e2e3]
|mod_proxy          |プロキシ機能 |
|mod_proxy_balancer |[[ロードバランサ]]機能 |
|mod_proxy_http     | |
|mod_proxy_connect  |HTTPSのCONNECTメソッドをサポートする機能 |

***[[プロキシ]]関連機能([[Tomcat]]連携) [#nd57c152]
|mod_jk        |[[Tomcat]]とのJK連携 |
|mod_proxy_ajp |[[Tomcat]]とのAJP13通信機能 |
|mod_jk2       |[[Tomcat]]とのJK2連携。廃止? |

***[[キャッシュ]]機能(サーバサイドキャッシング) [#i62b8eaa]
|mod_cache      |キャッシュ機能を使う場合は有効にする |
|mod_disk_cache |キャッシュデータをディスクに保存 |
|mod_mem_cache  |キャッシュデータをメモリに保存 |
|mod_headers    |HTTPリクエストヘッダによるキャッシング制御を使う |

***キープアライブ機能 [#o75019a0]
-KeepAlive
-MaxKeepAliveRequest
-KeepAliveTimeout

**サードパーティーのモジュール [#f89e63b0]
***アクセス制御(認証) [#q02be05c]
-mon_auth_tkt
-mod_auth_ntlm_winbind

*Apacheの構造 [#v1ea0360]
-外部ライブラリ
-モジュール
-CORE
-OS

*Apacheのリクエストトランザクション [#z83c0fd1]
+リクエスト受信後 
+URI変換
+ヘッダの解析
+アクセス制御
+認証
+アクセス許可
+MIMEタイプチェック
+微調整
+応答
+ロギング
+後処理

*インストール [#ff7502b4]
**Debian [#y793dba9]
 apt install apache2

**Red Hat [#ze4fddb7]
 yum install httpd

*ツール [#h567bac5]
**apachectl [#b1ca4207]
-Apache の設定ファイルの構文チェック
 apachectl configtest
-Apache の起動・停止・再起動
 apachectl start
 apachectl stop
 apachectl restart
-Apache の再起動 ※処理中のリクエストを考慮する
 apachectl -k graceful
 apachectl -k graceful-stop

**httpd ※Red Hat系 [#b17827ff]
-バージョンの表示
 httpd -version
 httpd -V

-モジュールを表示
 httpd -M

**apache2 ※Debian系 [#b17827ff]
-バージョンの表示
 apache2 -version
 apache2 -v
 apache2 -V

-モジュールを表示
 apache2 -M

**サイトの操作 [#m6be13c9]
***a2ensite [#s2b2a274]
-有効化
 a2ensite <site-name>.conf
***a2dissite [#c0321ff1]
-無効化
 a2dissite <site-name>.conf

**モジュールの操作 [#ve849799]
***a2enmod [#c24186f0]
-有効化
 a2enmod <module-name>
***a2dismod [#o9bb24d5]
-無効化
 a2dismod <module-name>

*設定 [#z0de5e4c]
**メインの設定ファイル [#r669e3b2]
-/etc/httpd/conf/httpd.conf
-/etc/apache2/apache2.conf

|ServerRoot | Apache サーバのルートディレクトリ |
|ServerTokens | HTTPレスポンスヘッダのサーバ情報(Server:)|
|ServerSignature | エラーメッセージなどに表示されるサーバ情報|
|TraceEnable | Traceメソッドの有効化|
|DirectorySlash | |
|DirectoryIndex | ルート(/)を指定して表示するファイルを指定する。複数ファイルの指定が可能。 |
|Directory | |

**Apache がリッスンするポートの設定 [#c9ab70a0]
-/etc/apache2/ports.conf

**apache2ctl コマンドの環境変数の設定 [#x6d0bc74]
-/etc/apache2/envvars

**仮想ホストの設定 [#p550373f]
-/etc/apache2/sites-available/
-/etc/apache2/sites-enabled/

**仮想ホスト以外の設定 [#tb4dbe2b]
-/etc/apache2/conf-available/
-/etc/apache2/conf-enabled/

**拡張モジュールの設定 [#k990f22f]
-/etc/apache2/mods-available/
-/etc/apache2/mods-enabled/

**ディレクトリ単位で設定するファイル [#a17c5b8c]
-.htaccess
--設定ファイルが保存されているディレクトリを含めた配下のサブディレクトリに対して設定内容が適用される

*ログ [#gfff2ffd]
-/var/log/apache2/access.log
-/var/log/apache2/error.log

-/var/log/apache2/<hostname>_access.log
-/var/log/apache2/<hostname>_error.log

*[[セッション]]情報の維持 [#dc309640]
**スティッキーセッション方式 [#l777cf53]
-セッション変数を永続的に利用する
-クライアント側が[[Cookie]]を使わない場合、携帯端末によってはURL RewritingによりセッションIDを[[URL]]に記載する。これに対するサーバ側の対応として、[[URL]]に含まれるセッションIDを取得する。

*チューニング [#wbaf4d73]
**MaxClients値の求め方 [#m0a461aa]
-MaxClients = 実メモリ / httpdのプロセスサイズ
--プロセスのサイズを小さくするために不要なモジュールを無効にする
--動的コンテンツと静的コンテンツを別々のhttpdで処理する
--mod_proxyを使ってApacheをPROXYとして動作させ、別httpdのコンテンツを同一サーバのコンテンツのように見せる

*セキュリティ対策 [#r170e016]
-HTTPリスポンスヘッダのバージョン情報を隠蔽する
-エラーページ等のデフォルトコンテンツを置き換える
-HTTPSで通信するデータを暗号化する。

*関連サイト [#l46ab128]
-ディレクティブ一覧 - Apache HTTP サーバ バージョン 2.4~
https://httpd.apache.org/docs/2.4/ja/mod/directives.html

*関連用語 [#z579d205]
-[[Tomcat]]
-[[Keep-Alive]]
-[[nginx]]