導入
Apacheはインターネット上で最も人気のあるウェブサーバーの1つです。現在稼働しているウェブサイトの半分以上を提供しています。コンテンツを提供するためには多くの適切なウェブサーバーがありますが、Apacheの動作原理を理解することは有益です。
この記事では、一般的な設定ファイルとそれらで制御できるオプションについて調査します。この記事では、Ubuntu/DebianのApacheファイルのレイアウトに従いますが、他のディストリビューションが構成階層をどのように構築するかとは異なります。
前提条件
Ubuntuバージョン16.04またはそれ以下を使用している場合は、これらのバージョンのサポートがUbuntuによって提供されなくなったため、より最新のバージョンにアップグレードすることをお勧めします。このガイドのコレクションが、Ubuntuバージョンのアップグレードに役立ちます。
-
Ubuntuを実行しているサーバーと、
sudo
権限を持つノンルートユーザー、アクティブなファイアウォールが必要です。これらの設定方法についてのガイダンスは、このリストからディストリビューションを選択し、当社の初期サーバーセットアップガイドに従ってください。 -
Apacheの設定を探索する前に、サーバーにApacheをインストールしておく必要があります。UbuntuにApache Webサーバーをインストールする方法については、「UbuntuにApache Webサーバーをインストールする方法」のチュートリアルに従って学ぶことができます。22.04 / 20.04 / 18.04、またはDebian 10にApache Webサーバーをインストールする方法のチュートリアルに従ってください。
UbuntuでApache Webサーバーを設定する5つの手順
ステップ1:Apacheファイル階層
Apacheは、そのメインの設定ファイルを/etc/apache2
フォルダー内に保持しています。以下のコマンドを実行すると、このフォルダー内のすべてのファイルがリストされます:
Outputenvars 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/
: これらのディレクトリは、オプションでロードできるモジュールを定義します。これらのディレクトリには2つのコンポーネントが含まれています: 特定のモジュールをロードするフラグメントを含む.load
で終わるファイルと、これらのモジュールの構成を保存する.conf
で終わるファイルです。
Apacheの構成は単一の一枚岩のファイルではなく、新しいファイルを必要に応じて追加および変更できるモジュラーデザインを通じて行われます。
ステップ2: Apache2.confファイルの探索
Apacheサーバーのメイン構成の詳細は、/etc/apache2/apache2.conf
ファイルに保持されます。
このファイルは主に3つのセクションに分かれています:
- グローバルApacheサーバープロセスの構成
- デフォルトサーバーの構成
- 仮想ホストの構成。
お好みのテキストエディタでこのファイルを開きます。以下の例では nano
を使用しています:
UbuntuとDebianでは、このファイルはグローバルな定義を構成するために使用されます。デフォルトサーバーと仮想ホストの構成は、Include
ディレクティブを使用して処理されます。
Include
ディレクティブにより、Apacheは他の構成ファイルを現在のファイルに指定した位置に読み込むことができます。その結果、Apacheは起動時に包括的な構成ファイルを動的に生成します。
このファイル内には、いくつかの異なるInclude
およびIncludeOptional
ステートメントが含まれています。これらのディレクティブは、モジュール定義、ports.conf
ドキュメント、conf-enabled/
ディレクトリ内の特定の設定ファイル、およびsites-enabled/
ディレクトリ内の仮想ホスト定義をロードします。
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf
ステップ3:Apacheグローバル設定のセットアップ
グローバル設定で変更したいオプションがいくつかあります:
タイムアウト
デフォルトでは、このパラメータは300
に設定されています。これは、サーバーが各リクエストを処理するために最大で300秒の時間制限があることを意味します。
このパラメータは、安全に30
から60
秒の間に設定できます。
KeepAlive
このオプションは、On
に設定されている場合、各接続が同じクライアントからの複数のリクエストを処理するために開いたままになります。
Off
に設定されている場合、各リクエストは新しい接続を確立する必要があります。これは、設定やトラフィック状況によっては、かなりのオーバーヘッドになる可能性があります。
MaxKeepAliveRequests
これは、各接続が死ぬ前に処理する別々のリクエストの数を制御します。この数を高く設定すると、Apacheは各クライアントに効果的にコンテンツを提供できます。
デフォルト設定は100
になっています。この値を0
に設定すると、Apacheは各接続で無制限のリクエストを処理できます。
KeepAliveTimeout
この設定は、最後のリクエストを完了した後に次のリクエストを待機する時間を指定します。タイムアウトの閾値に達すると、接続が切断されます。
これはつまり、次にコンテンツが要求されると、サーバーがページを構成するコンテンツの要求を処理するために新しい接続を確立することを意味します。デフォルトは5
に設定されています。
この設定ファイルの内容を調べた後は、CTRL+X
を押して閉じることができます。
マルチプロセッシングモジュール
A Multi-Processing Module (MPM) extends Apache’s modular design. MPMs are responsible for listening, directing, and handling different network requests. You can cross-reference which section your Apache installation was compiled in with using the following command:
OutputCompiled 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
サーバーでMPMタイプを確認するには、a2query -M
コマンドを使用します:
Outputevent
出力によると、このサーバーでevent
MPMが使用されています。インストールには複数の選択肢があるかもしれませんが、選択できるのは1つだけです。
ステップ4:Apache仮想ホストファイルの更新
デフォルトの仮想ホスト宣言は、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
…
デフォルトの仮想ホストは、ポート80
(標準のHTTPポート)でのすべてのリクエストを処理するように構成されています。これは、宣言ヘッダーで*:80
と記述されている部分で定義されています。
ただし、これは必ずしもこのポートへのサーバーへのすべてのリクエストを処理することを意味しません。Apacheは、リクエストに一致する最も具体的な仮想ホスト定義を使用します。より具体的な定義がある場合、これらの定義が優先される可能性があります。ファイルを調べた後は、CTRL+X
を押して閉じることができます。
Apache仮想ホストの設定
以下のオプションは、他の下位サブ宣言の外で仮想ホストの定義内に設定されています。これらは仮想ホスト全体に適用されます。
まず、conf-available/
ディレクトリ内のsecurity.conf
ファイルを開いてください:
このファイルには、Server Signature
ディレクティブが含まれており、サーバーに問題が発生した場合に使用する連絡先メールを指定できます。デフォルトのオプションをOn
からEMail
に変更すると、サーバー管理者のメールアドレスが表示されます。この設定を調整する場合は、メールを受信する意思があることを確認してください:
…
ServerSignature EMail
…
ファイルを閉じるには、CTRL+X
を押します。構成ファイルを編集した後、プロンプトが表示され、変更を確認するように求められます。ファイルに変更を保存するにはY
を、破棄するにはN
を押します。
仮想ホストファイル内で、このリクエストを処理するドメイン名またはIPアドレスを指定するServerName
ディレクティブを追加できます。これは、仮想ホストに特定性を追加し、ServerName
の値と一致する場合にデフォルトの定義をオーバーライドできるオプションです。
以下のコマンドを実行して、仮想ホストファイルを開いてください。ただし、your_domain
変数を実際のドメイン名に置き換えてください:
your_domain
をServerName
ディレクティブに追加してください。
…
ServerName your_domain
…
同様に、ServerAlias
ディレクティブを使用して、仮想ホストを複数の名前に適用することもできます。これにより、同じコンテンツにアクセスする別のパスが提供されます。これの良い使用例は、www
で始まる同じドメインを追加することです。
…
ServerAlias www.your_domain.com
…
DocumentRoot
ディレクティブは、この仮想ホストにリクエストされたコンテンツが配置される場所を指定します。Ubuntuでは、デフォルトの仮想ホストが/var/www/
ディレクトリからコンテンツを提供するように設定されています。
…
DocumentRoot /var/www/your_domain/public_html
…
ディレクトリの定義
仮想ホストの定義内には、ファイルシステム内の異なるディレクトリをサーバーがどのように処理するかに関する定義があります。Apacheはこれらの方向性を最短から最長まで順番に適用するため、以前のオプションを上書きする可能性が再びあります。
このコマンドで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
変数をドメイン名に置き換えます。
Alias
ディレクティブは、URLパスをディレクトリパスにマッピングします。たとえば、your_domain
へのリクエストを処理する仮想ホストでは、次のようにすることで、your_domain.com/content/
に移動すると/usr/local/apache/content/
内のコンテンツにアクセスできます。
Alias “/content/” “/usr/local/apache/content/”
ScriptAlias
ディレクティブは同じ方法で動作しますが、実行可能なコンポーネントが含まれるディレクトリを定義するために使用されます。
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
前のセクションで議論したように、アクセス権を持つディレクトリを定義してください。ファイルの編集が完了したら、CTRL+X
を押してファイルを終了します。このファイルに変更を加えた場合は、Y
を押して変更内容をファイルに保存し、構成を変更するか、変更前の状態でファイルを残すかを指定します。
ステップ5:サイトとモジュールの有効化
要件を満たす仮想ホストファイルがある場合、Apacheに含まれるツールを使用してそれをライブウェブサイトに移行できます。
sites-available
ディレクトリ内の既存ファイルに対してsites-enabled
ディレクトリにシンボリックリンクを作成するには、次のコマンドを入力します。自分の仮想ホストサイト構成ファイルの名前でyour_domain
を置き換えてください。
サイトを有効にした後、次のコマンドを入力してApacheにその構成ファイルを再読み込みさせ、変更を適用します。
仮想ホストを無効にするための関連コマンドもあります。これはsites-enabled
ディレクトリからシンボリックリンクを削除することで機能します。たとえば、仮想ホストサイトが有効になっている場合、デフォルトの000-default
サイトを無効にできます。
モジュールは、それぞれa2enmod
およびa2dismod
コマンドを使用して有効または無効にできます。これらのコマンドのバージョンであるa2ensite
およびa2dissite
も同様の方法で機能します。たとえば、info
モジュールを有効にするには、次のコマンドを使用できます:
同様に、a2dismod
コマンドを使用してモジュールを無効にすることもできます:
設定ファイルを変更し、モジュールを有効または無効にした後は、Apacheを再起動することを忘れないでください。
結論
Apacheは多機能で非常にモジュラーなため、設定ニーズはセットアップに応じて異なります。
上記の一般的な使用例を検討した後、主要な設定ファイルが何に使用されており、それらがどのように相互作用するかについて理解が得られるはずです。特定の設定オプションについて知りたい場合は、提供されているファイルに十分なコメントが付いており、Apacheは優れたドキュメントを提供しています。設定ファイルがもはや恐ろしくなくなり、自分のニーズに合わせて実験や変更を行うことがより快適に感じられることを願っています。