序章

Apacheは、インターネット上で最も人気のあるWebサーバーの1つです。 すべてのアクティブなWebサイトの半分以上にサービスを提供するために使用されます。 コンテンツを提供する実行可能なWebサーバーはたくさんありますが、Apacheはどこにでもあるため、どのように機能するかを理解しておくと役立ちます。

この記事では、いくつかの一般的な構成ファイルと、それらのファイル内で制御できるオプションについて説明します。 この記事では、ApacheファイルのUbuntu / Debianレイアウトに従います。これは、他のディストリビューションが構成階層を構築する方法とは異なります。

前提条件

Apache構成の調査を開始する前に、サーバーにApacheをインストールしておく必要があります。 Ubuntu20.04チュートリアルにApacheWebサーバーをインストールする方法またはDebian10チュートリアルにApacheWebサーバーをインストールする方法に従って方法を学ぶことができます。

Apacheファイル階層

Apacheは、メインの構成ファイルを/etc/apache2フォルダー内に保持します。 次のコマンドを実行すると、このフォルダー内のすべてのファイルが一覧表示されます。

  1. ls -f /etc/apache2
Output
envars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available

このディレクトリ内には、多数のプレーンテキストファイルといくつかのサブディレクトリがあります。 知っておくと便利な場所を次に示します。

  • apache2.conf:これはサーバーのメイン構成ファイルです。 ほとんどすべての構成はこのファイル内から実行できますが、簡単にするために、個別の指定されたファイルを使用することをお勧めします。 このファイルはデフォルトを構成し、サーバーが構成の詳細を読み取るための中心的なアクセスポイントになります。
  • ports.conf:このファイルは、仮想ホストがリッスンするポートを指定するために使用されます。 SSLを構成している場合は、このファイルが正しいことを確認してください。
  • sites-available/およびsites-enabled/sites-availableディレクトリには、仮想ホストファイルの構成が含まれています。 このフォルダー内の構成により、どのコンテンツがどの要求に対して提供されるかが確立されます。 これは、アクティブ化された仮想ホスト構成ファイルを格納するsites-enabledディレクトリにリンクすることで有効になります。 Apacheが起動またはリロードすると、完全な構成をコンパイルするときに、sites-enabledディレクトリ内から構成ファイルとリンクを読み取ります。
  • conf-available/およびconf-enabled/:これらのディレクトリには、仮想ホスト構成ファイルに接続されていない構成フラグメントが格納されます。
  • mods-enabled/およびmods-available/:これらのディレクトリは、オプションでロードできるモジュールを定義します。 ディレクトリには、特定のモジュールをロードするフラグメントを含む.loadで終わるファイルと、これらのモジュールの構成を格納する.confで終わるファイルの2つのコンポーネントが含まれます。

Apacheの構成は、単一のモノリシックファイルでは行われず、代わりに、必要に応じて新しいファイルを追加および変更できるモジュラー設計によって行われます。

Apache2.confファイルの探索

Apacheサーバーの主な構成の詳細は、/etc/apache2/apache2.confファイルに保持されています。 このファイルは、次の3つの主要なセクションに分かれています。

  • グローバルApacheサーバープロセスの設定
  • デフォルトサーバーの構成
  • 仮想ホストの構成。

お好みのテキストエディタでこのファイルを開きます。 次の例では、nanoを使用しています。

  1. sudo nano /etc/apache2/apache2.conf

UbuntuとDebianでは、このファイルはグローバル定義を構成するために使用されます。 デフォルトサーバーと仮想ホストの構成は、Includeディレクティブを使用して処理されます。 Includeディレクティブを使用すると、Apacheは、ステートメントが表示される場所にある現在のファイルに他の構成ファイルを読み込むことができます。 その結果、Apacheは起動時に包括的な構成ファイルを動的に生成します。

このファイル内には、さまざまなIncludeおよびIncludeOptionalステートメントがあります。 これらのディレクティブは、モジュール定義、ports.confドキュメント、conf-enabled/ディレクトリ内の特定の構成ファイル、およびsites-enabled/ディレクトリ内の仮想ホスト定義をロードします。

/etc/apache2/apache2.conf
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf

グローバル構成

グローバル構成で変更したいオプションがいくつかあります。

タイムアウト

デフォルトでは、このパラメーターは300に設定されています。 これは、サーバーが各要求を満たすために最大300秒あることを意味します。 このパラメータは、30から60秒の間に安全にドロップできます。

生き続ける

このオプションをOnに設定すると、各接続を開いたままにして、同じクライアントからの複数の要求を処理できるようになります。 これがOffに設定されている場合、各リクエストは新しい接続を確立する必要があり、セットアップとトラフィックの状況によってはかなりのオーバーヘッドが発生する可能性があります。

MaxKeepAliveRequests

これは、各接続が停止する前に処理する個別の要求の数を制御します。 この数を高く保つと、Apacheは各クライアントにより効果的にコンテンツを提供できるようになります。 デフォルト設定は100に設定されています。 この値を0に設定すると、Apacheは接続ごとに無制限の量のリクエストを処理できるようになります。

KeepAliveTimeout

この設定は、最後の要求を終了した後、次の要求を待機する時間を指定します。 タイムアウトしきい値に達すると、接続は切断されます。 これは、次にコンテンツが要求されたときに、サーバーが新しい接続を確立して、クライアントがアクセスしているページを構成するコンテンツの要求を処理することを意味します。 デフォルトは5に設定されています。

この構成ファイルの内容を調べた後、CTRL+Xを押してファイルを閉じることができます。

マルチプロセッシングモジュール

マルチプロセッシングモジュール(MPM)は、Apacheのモジュラー設計を拡張します。 MPMは、さまざまなネットワーク要求をリッスン、送信、および処理する責任があります。 次のコマンドを使用して、Apacheインストールがコンパイルされたセクションを相互参照できます。

  1. apache2 -L
Output
Compiled in modules: core.c mod_so.c mod_watchdog.c http_core.c mod_log_config.c mod_logio.c mod_version.c mod_unixd.c

a2query -Mコマンドを使用して、サーバーのMPMタイプを確認できます。

  1. a2query -M
Output
event

出力は、eventMPMがこのサーバーで使用されていることを示しています。 インストールには複数の選択肢がある場合がありますが、選択できるのは1つだけです。

仮想ホストファイル

デフォルトの仮想ホスト宣言は、sites-available/ディレクトリ内の000-default.confというファイルにあります。 このファイルを調べることで、仮想ホストファイルの一般的な形式について知ることができます。

次のコマンドでファイルを開きます。

  1. sudo nano /etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…

デフォルトの仮想ホストは、標準のHTTPポートであるポート80ですべての要求を処理するように構成されています。 これは、*:80と表示されている宣言ヘッダーで定義されています。これは、任意のインターフェイスのポート80を意味します。 ただし、これは、必ずしもこのポートでサーバーへの各要求を処理することを意味するものではありません。 Apacheは、リクエストに一致する最も具体的な仮想ホスト定義を使用します。 より具体的な定義があれば、この定義に取って代わる可能性があります。 ファイルを調べた後、CTRL+Xを押してファイルを閉じることができます。

仮想ホスト構成オプション

次のオプションは、他の下位レベルのサブ宣言の外部の仮想ホスト定義内で設定されます。 それらは仮想ホスト全体に適用されます。 開始するには、conf-available/ディレクトリ内のsecurity.confファイルを開きます。

  1. sudo nano /etc/apache2/conf-available/security.conf

このファイルには、Server Signatureディレクティブが含まれています。このディレクティブを使用すると、サーバーに問題が発生したときに使用する連絡先の電子メールを指定できます。 デフォルトのオプションをOnからEMailに変更して、サーバー管理者の電子メールアドレスを表示できます。 この設定を調整する場合は、メールを喜んで受信することを確認してください。

/etc/apache2/conf-available/security.conf
…
ServerSignature EMail

CTRL+Xを押してファイルを終了します。 構成ファイルを編集した後、変更を確認するように求めるプロンプトが表示されます。 Yを押してファイルへの変更を保存するか、Nを押して変更を破棄します。

仮想ホストファイル内に、このリクエストが処理するドメイン名またはIPアドレスを指定するServerNameディレクティブを追加できます。 これは、仮想ホストに特異性を追加し、ServerName値と一致する場合にデフォルトの定義をオーバーライドできるようにするオプションです。

次のコマンドを実行して仮想ホストファイルを開き、your_domain変数を実際のドメイン名に置き換えてください。

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

your_domainServerNameディレクティブに追加します。

/etc/apache2/sites-available/your_domain.conf
…
ServerName your_domain

同様に、ServerAliasディレクティブを使用して、仮想ホストを複数の名前に適用することもできます。 これにより、同じコンテンツにアクセスするための代替パスが提供されます。 これの良い使用例は、wwwの前に同じドメインを追加することです。

/etc/apache2/sites-available/your_domain.conf
…
ServerAlias www.your_domain.com

DocumentRootディレクティブは、この仮想ホストに要求されるコンテンツが配置される場所を指定します。 Ubuntuでは、デフォルトの仮想ホストは、/var/www/ディレクトリからコンテンツを提供するように設定されています。

/etc/apache2/sites-available/your_domain.conf
…
DocumentRoot /var/www/your_domain/public_html

ディレクトリ定義

仮想ホスト定義内には、サーバーがファイルシステム内のさまざまなディレクトリを処理する方法の定義があります。 Apacheは、これらすべての方向を短いものから長いものの順に適用するため、以前のオプションをオーバーライドする機会が再びあります。

次のコマンドでapache2.confファイルを開きます。

  1. sudo nano /etc/apache2/apache2.conf
/etc/apache2/apache2.conf
…
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
…

最初のディレクトリ定義は、/またはrootディレクトリのルールを適用します。 これにより、ファイルシステムで提供されるすべてのファイルに適用されるため、仮想ホストのベースライン構成が提供されます。 このファイルに含まれているいくつかの役立つコメントとともに、ディレクトリ構成オプションに注意してください。 このデフォルト構成は、後続のディレクトリ定義で特に指定されていない限り、すべてのコンテンツへのアクセスを拒否します。

Requireディレクティブは、サーバー内のさまざまなリソースへのアクセスを制限または開くことができます。 AllowOverrideディレクティブは、.htaccessファイルがコンテンツディレクトリに配置されている場合に設定を上書きできるかどうかを決定するために使用されます。 これはデフォルトでは許可されていませんが、さまざまな状況で有効にするのに役立ちます。 このファイルの内容を確認した後、CTRL+Xを押してファイルを閉じることができます。

AliasおよびScriptAliasステートメント

ディレクトリ定義の前にAliasまたはScriptAliasディレクティブが付いている場合があります。 次のコマンドで仮想ホスト構成ファイルを開き、your_domain変数をドメイン名に置き換えます。

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Aliasディレクティブは、URLパスをディレクトリパスにマップします。 たとえば、your_domainへのリクエストを処理する仮想ホストでは、your_domain.com/content/に移動するときに、/usr/local/apache/content/内のコンテンツへのアクセスが許可されます。

/etc/apache2/sites-available/your_domain.conf
Alias “/content/” “/usr/local/apache/content/”

ScriptAliasディレクティブは同じように動作しますが、実行可能コンポーネントを含むディレクトリを定義するために使用されます。

/etc/apache2/sites-available/your_domain.conf
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"

前のセクションで説明したように、アクセス権限でディレクトリを定義することを忘れないでください。 ファイルの編集が完了したら、CTRL+Xを押してファイルを終了します。 このファイルに変更を加えた場合は、Yを押して変更をファイルに保存するか、Nを押して構成を変更する前のファイルをそのままにします。

サイトとモジュールの有効化

要件を満たす仮想ホストファイルを作成したら、Apacheに含まれているツールを使用して、ライブWebサイトに移行できます。 sites-enabledディレクトリ内にsites-availableディレクトリ内の既存のファイルへのシンボリックリンクを作成するには、次のコマンドを発行します。 your_domainは、必ず独自の仮想ホストサイト構成ファイルの名前に置き換えてください。

  1. sudo a2ensite your_domain

サイトを有効にした後、次のコマンドを発行して、Apacheに構成ファイルを再ロードするように指示し、変更が反映されるようにします。

  1. sudo systemctl restart apache2

仮想ホストを無効にするためのコンパニオンコマンドもあります。 sites-enabledディレクトリからシンボリックリンクを削除することで動作します。 たとえば、仮想ホストサイトを有効にすると、デフォルトの000-defaultサイトを無効にできます。

  1. sudo a2dissite 000-default

モジュールは、a2enmodおよびa2dismodコマンドをそれぞれ使用して有効または無効にできます。 これらは、これらのコマンドのa2ensiteおよびa2dissiteバージョンと同じように機能します。 たとえば、infoモジュールを有効にするには、次のコマンドを使用できます。

  1. sudo a2enmod info

同様に、a2dismodコマンドを使用してモジュールを無効にすることができます。

  1. sudo a2dismod info

設定ファイルを変更し、モジュールを有効または無効にした後、Apacheを再起動することを忘れないでください。

結論

Apacheは用途が広く、非常にモジュール化されているため、構成のニーズはセットアップによって異なります。 上記のいくつかの一般的なユースケースを確認した後、メインの構成ファイルが何に使用され、それらが互いにどのように相互作用するかをよく理解する必要があります。 特定の構成オプションについて知る必要がある場合は、提供されたファイルに十分なコメントが付けられており、Apacheは優れたドキュメントを提供します。 うまくいけば、構成ファイルは今ほど威圧的ではなく、ニーズに合わせて実験や変更をより快適に感じることができます。