当記事ではApache HTTP Server v2.4.46におけるhttpd.confの設定内容について考えてみた思考過程をまとめています。
以前、httpd.confの最小構成を追求しましたが、今回は設定を少しずつ増やしていきながら「Apach HTTP Serverを動かすときに必要な設定は何だろう?」「各設定には、どのような意味があるのだろう?」ということを考えていきます。検証環境はWindows 10 Home 64bit版です。
Apache 2.4におけるhttpd.confの最小構成 - Qiita
※2021/01/06: 現在、掲載中の設定ではES modules機能を利用できない可能性がありますので、利用できるようになるかもしれない設定方法を記載した記事へのリンクを記事末尾に追加しました。
1. 絶対必要なディレクティブ
まずは以前の記事で検証した最小構成をもう一度見てみます。なお、パスはダブルクォートで囲むようにし、相対パスの先頭には./
を付けるようもしました。これは私好みの記法であり、このように書く必要はありません。
Listen 80
LoadModule authz_core_module "./modules/mod_authz_core.so"
改めて、やはりスッカラカンですね。ここまでディレクティブが省略されていると機能的に乏しい以前に、サーバーの基本的な挙動が暗黙的になるのでよろしくありません。
例えば、この設定の場合、サーバーのルートパスはhttpd.exeが配置されているドライブ直下のApache24というディレクトリが使われます。ServerRoot "C:/Apache24"
と書いていないのに、そのような挙動になるのは使いにくいこと、このうえありません。
まずは暗黙的な部分を潰していき、httpd.confの内容からサーバーの挙動が分かるようにします。
2. 暗黙的な挙動を潰すためのディレクティブ
そんなわけで、いくつかのディレクティブを追加してみました。これらディレクティブを指定したおかげで、サーバーの挙動が明確になりました。
DirectoryIndex "./index.html"
DocumentRoot "./htdocs"
ErrorLog "./logs/error.log"
LoadModule dir_module "./modules/mod_dir.so"
LogLevel warn
ServerName localhost:80
ServerRoot "C:/Apache HTTP Server v2.4.46"
3. 入れておきたいディレクティブ
さらに、いくつかのディレクティブも追加します。
CustomLog "./logs/access.log" "%h %l %u %t \"%r\" %>s %b"
LoadModule log_config_module "./modules/mod_log_config.so"
mod_log_configで定義されているCustomLogディレクティブを使って、アクセスログを生成するようにします。
4. とりあえず設定しておくディレクティブ
さほど重要とは思いませんが、とりあえず次のようなディレクティブも設定しておきます。
ServerAdmin agadget@example.com
<Directory "./">
AllowOverride None
Options None
Require all denied
</Directory>
<Directory "./htdocs">
Require all granted
</Directory>
追加した設定は大きく3つに分けられます。まず、ServerAdminディレクティブにサーバー管理者への連絡先を記述しました。また、1つ目の<Directory>セクションでサーバー全体に、設定の上書き不許可・特殊機能の停止・アクセス拒否を設定しました。ただし、これではDocumentRootディレクティブで設定したディレクトリ内にもアクセスできなくなるので、2つ目の<Directory>セクションで当該ディレクトリ内だけはアクセスできるようにしました。
5. 完成
以上より、httpd.confの実用的な最小構成は以下のようになると考えます。
# ----------------------------------------------------------------
# 基本設定です。
# ----------------------------------------------------------------
CustomLog "./logs/access.log" "%h %l %u %t \"%r\" %>s %b"
DirectoryIndex "./index.html"
DocumentRoot "./htdocs"
ErrorLog "./logs/error.log"
Listen 80
LoadModule authz_core_module "./modules/mod_authz_core.so"
LoadModule dir_module "./modules/mod_dir.so"
LoadModule log_config_module "./modules/mod_log_config.so"
LogLevel warn
ServerAdmin agadget@example.com
ServerName localhost:80
ServerRoot "C:/Apache HTTP Server v2.4.46"
<Directory "./">
AllowOverride None
Options None
Require all denied
</Directory>
<Directory "./htdocs">
Require all granted
</Directory>
6. ES modules機能が使えないとき
以下記事を参照してください。