0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apache 2.4のhttpd.confを考えてみた

Last updated at Posted at 2021-01-01

当記事では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. 絶対必要なディレクティブ

まずは以前の記事で検証した最小構成をもう一度見てみます。なお、パスはダブルクォートで囲むようにし、相対パスの先頭には./を付けるようもしました。これは私好みの記法であり、このように書く必要はありません。

httpd.conf
Listen 80
LoadModule authz_core_module "./modules/mod_authz_core.so"

改めて、やはりスッカラカンですね。ここまでディレクティブが省略されていると機能的に乏しい以前に、サーバーの基本的な挙動が暗黙的になるのでよろしくありません。

例えば、この設定の場合、サーバーのルートパスはhttpd.exeが配置されているドライブ直下のApache24というディレクトリが使われます。ServerRoot "C:/Apache24"と書いていないのに、そのような挙動になるのは使いにくいこと、このうえありません。

まずは暗黙的な部分を潰していき、httpd.confの内容からサーバーの挙動が分かるようにします。

2. 暗黙的な挙動を潰すためのディレクティブ

そんなわけで、いくつかのディレクティブを追加してみました。これらディレクティブを指定したおかげで、サーバーの挙動が明確になりました。

httpd.conf
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. 入れておきたいディレクティブ

さらに、いくつかのディレクティブも追加します。

httpd.conf
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. とりあえず設定しておくディレクティブ

さほど重要とは思いませんが、とりあえず次のようなディレクティブも設定しておきます。

httpd.conf
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の実用的な最小構成は以下のようになると考えます。

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機能が使えないとき

以下記事を参照してください。

ESモジュールが読み込めないときに試してみたいApache 2.4の設定 - Qiita

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?