用語辞典・サーバー・Web運営

Apache

Apacheとは

Apacheは、Apache HTTP Serverの通称で、モジュールや.htaccessなどによる柔軟な設定が可能なWebサーバーです。一般に「アパッチ」と読み、Apache Software FoundationのHTTP Server Projectが開発するオープンソースソフトウェアです。

設定ディレクティブを組み合わせ、静的ファイル配信、仮想ホスト、TLS、認証、URL変更、プロキシ、圧縮、ログなどを構成します。必要な機能をmodule(モジュール)として組み込めることが大きな特徴です。

Apacheは会社名でもサーバー機器の種類でもなく、HTTP要求を処理するソフトウェアです。同じ物理機やVPSで複数のApacheインスタンスや別のWebサーバーを動かすこともできます。

中心のHTTP処理へ、TLS・認証・書き換え・プロキシ・圧縮・ログのモジュールを必要に応じて接続する主要設定から仮想ホストとディレクトリーへ、効く範囲を段階的に限定する
中央のApache HTTP処理装置に保護、経路変更、認証、プロキシ、圧縮、記録の各モジュールが接続され、二つの仮想ホスト棚と一部フォルダーだけの設定札があるピクトグラム図解
図1モジュールが利用可能でも自動的に有効とは限りません。配布パッケージと事業者の構成で、読み込めるモジュールやディレクティブが変わります。

設定は「どこへ効くか」と一緒に読む

同じディレクティブでも、サーバー全体、ホスト、ファイル階層、URL空間、個別ファイルで意味が変わる設定名だけでなく文脈を公式文書で確認する
Server設定インスタンス全体

Listen、モジュール読込、既定値など、主要設定の広い範囲へ適用する。

VirtualHostホスト単位

ServerName、DocumentRoot、証明書、ログなどをドメインやIP・ポートごとに分ける。

Directoryファイルシステム単位

実際のディレクトリーへアクセス許可、override、選択肢などを適用する。

LocationURL空間単位

要求URLのパスに基づき、処理ハンドラー、プロキシ、認証などを適用する。

Filesファイル名単位

特定の名前やパターンへ、拒否や処理ハンドラーなどを限定する。

.htaccessディレクトリーから下

主要設定で許可されたディレクティブだけを、コンテンツディレクトリー内から上書きする。

図2ファイルシステムの<Directory>とURLの<Location>は対象が違います。見た目が似たパスでも同じ範囲とは限りません。

VirtualHostで一つのインスタンスが複数サイトを扱う

<VirtualHost>の中へServerName、ServerAlias、DocumentRoot、ログ、TLS設定などを書きます。要求のホスト名と接続先を照合し、該当するホストの設定でWebサーバー処理を続けます。

名前が一致しない要求は最初の仮想ホストなど既定の扱いになるため、意図しないサイトを見せない既定ホストを用意します。HTTPSではSNIと証明書の名前も対応させます。

.htaccessは許可されたディレクトリーだけで働く

.htaccess(ドット・エイチティーアクセス)は、コンテンツディレクトリーに置ける分散設定ファイルです。利用者が主要設定を変更できない共用サーバーで、URL書き換え、認証、アクセス制御などをディレクトリー単位で設定するために使われます。

どのディレクティブを使えるかはAllowOverrideとAllowOverrideListで制御されます。許可がNoneなら置いても読まれません。Apacheは要求ごとに該当階層を確認するため、主要設定を変更できる環境では、公式文書もサーバー設定へまとめることを勧めています。

モジュールが処理を追加する

mod_sslはHTTPSのTLS、mod_書き換えは条件付きURL変更、mod_プロキシは逆プロキシ、mod_authz_コアは認可などを担当します。モジュール名が似ていても、認証、認可、対応付け、処理ハンドラーは別段階です。

使わないモジュールを読み込まなければ、攻撃面と設定量を減らせます。ただし配布版がモジュールを動的に分割するか、組み込み済みにするかは異なります。現在の読込状態を確認してから設定します。

MPMが接続と処理・スレッドの扱いを決める

MPM(Multi-Processing Module/マルチプロセッシング・モジュール)は、要求を処理やスレッドへ割り当てる中核方式です。prefork、ワーカー、イベントなどがあり、OSや組み込みモジュールとの互換性で選びます。

MPMは「ページの内容」を決めるモジュールではありません。同時接続、キープアライブ、処理数、スレッド数、メモリ使用へ影響します。上限を大きくするだけでは、PHPやデータベースの処理能力を超えて待ち行列を増やすことがあります。

静的配信、PHP、逆プロキシを分担する

静的ファイルはDocumentRootから直接返せます。PHPはApacheモジュールとして実行する構成も、FastCGI経由でPHP-FPMへ渡す構成もあります。どの処理ハンドラーがどの拡張子・パスへ設定されているかを確認します。

別のアプリサーバーへ転送する場合はProxyPassなどを使います。背後のLocationヘッダーを書き換えるProxyPassReverse、元のホスト・スキーム・クライアント情報、タイムアウト、ヘルスチェック、WebSocketを構成に合わせます。

設定を検査してから段階的なに反映する

括弧、ディレクティブ、証明書パスなどの誤りは起動失敗を招きます。変更前に構成をバックアップし、Apacheの設定試験で構文を確認します。別の検証環境で仮想ホスト、リダイレクト、認証、静的・動的応答を試します。

段階的な再読み込みは既存接続を処理しながら新設定へ移行できますが、すべての変更が無停止とは限りません。モジュール更新やOS更新では再起動が必要な場合があります。監視で状態とエラーログを確認し、戻す手順を用意します。

ファイルシステムの既定公開範囲を狭くする

DocumentRoot以外を既定で許可せず、必要なディレクトリーだけRequireで開きます。ディレクトリーlisting、symlink、server-status、バックアップファイル、バージョン情報、サンプル設定を不要なら公開しません。

ワーカーをルートで動かさず、書込ディレクトリーをアップロードやキャッシュなど必要箇所へ限定します。Webから書けるディレクトリーでスクリプトを実行できると、アップロードされたファイルがコードとして動く恐れがあります。

Apache設定では「何をするディレクティブか」「どのモジュールが提供するか」「どの文脈で許されるか」「誰の要求へ効くか」の四点を一緒に読みます。

Apacheの確認資料:Apache HTTP Server DocumentationGetting Started.htaccess TutorialReverse Proxy Guide

関連用語