Apache HTTP Server

2023-12-02 (土) 20:12:43

Apache HTTP Server とは

種類

APR

  • Apache Portable Runtime

MPM

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

モジュール

標準モジュール

モジュール名説明
mod_httpHTTPプロトコルの処理
mod_actionsリクエストされたファイルの形式やHTTPメソッドに連動したCGIプログラムの実行
mod_aliasURLとディレクトリの対応関係の設定
mod_asisHTTPヘッダの追加
mod_autoindexディレクトリの一覧を作成
mod_cgi(mod_cgid)CGIプログラムの実行(スレッド非対応のMPMを選択した場合はmod_cgi、スレッド対応のMPMを選択した場合はmod_cgidが組み込まれる)
mod_deflateデータ圧縮転送
mod_dirディレクトリ名で終わるURLに標準のインデックス・ファイル名を補完
mod_envCGIプログラムへの環境変数の提供
mod_imapイメージ・マップ・ファイルのサポート
mod_includeSSIの処理
mod_log_configアクセスログ取得。ログの書式設定
mod_mime拡張子を使用したコンテンツ・タイプの判定
mod_negotiationクライアントの情報に基づくコンテンツの自動選択
mod_statusApacheの稼働状態の監視
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_connectHTTPSのCONNECTメソッドをサポートする機能

プロキシ関連機能(Tomcat連携)

mod_jkTomcatとのJK連携
mod_proxy_ajpTomcatとのAJP13通信機能
mod_jk2TomcatとのJK2連携。廃止?

キャッシュ機能(サーバサイドキャッシング)

mod_cacheキャッシュ機能を使う場合は有効にする
mod_disk_cacheキャッシュデータをディスクに保存
mod_mem_cacheキャッシュデータをメモリに保存
mod_headersHTTPリクエストヘッダによるキャッシング制御を使う

キープアライブ機能

サードパーティーのモジュール

アクセス制御(認証)

  • mon_auth_tkt
  • mod_auth_ntlm_winbind

Apacheの構造

  • 外部ライブラリ
  • モジュール
  • CORE
  • OS

Apacheのリクエストトランザクション

  1. リクエスト受信後 
  2. URI変換
  3. ヘッダの解析
  4. アクセス制御
  5. 認証
  6. アクセス許可
  7. MIMEタイプチェック
  8. 微調整
  9. 応答
  10. ロギング
  11. 後処理

インストール

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
ServerRootApache サーバのルートディレクトリ
ServerTokensHTTPレスポンスヘッダのサーバ情報(Server:)
ServerSignatureエラーメッセージなどに表示されるサーバ情報
TraceEnableTraceメソッドの有効化
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で通信するデータを暗号化する。

関連サイト

関連用語