事象
Apache2.2をyumインストールしていた環境から、Apache2.4環境に移行するために、2.4をソースビルドでインストールしました。
その際に、必要な設定とあわせてバーチャルホストも設定。2.2の設定内容を、そのままconf/extra/httpd-vhosts.conf
に記述しました。
conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName sandbox
ServerAdmin test@example.com
DocumentRoot /home/sandbox/htdocs/
ErrorLog /home/sandbox/logs/error_log
CustomLog /home/sandbox/logs/access_log combined
<Directory /home/sandbox/htdocs>
Options FollowSymlinks Includes
AllowOverride All
AddType text/html .html
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Apacheを再起動してブラウザで開いたところ、無情にもForbiddenが・・・。
Forbidden
You don't have permission to access /test.html on this server.
ちなみに、error_logには以下の内容が出力されていました。
AH01630: client denied by server configuration: /home/sandbox/htdocs/index.html
原因
ファイル・ディレクトリのパーミッションを疑う
問題ありませんでした。
Apacheの設定ファイルの記述ミスを疑う
どうやら、2.2から2.4では、アクセス許可設定の方法が変わっているらしい・・・。以下、変更内容。
2.2系
<Directory "/home/sandbox/htdocs">
Order allow,deny
Allow from all
</Directory>
2.4系
<Directory "/home/sandbox/htdocs">
Require all granted
</Directory>
ここを古い記述にしていることで、今回と同様のエラーが出ている人がたくさんいる様子。なるほど、そうだったのか・・・。
ちなみにhttpd.confを見ると、ルートディレクトリのアクセス制限の記述は、以下のとおり。
conf/httpd.conf
<Directory />
AllowOverride none
Require all denied
</Directory>
デフォルトではアクセス制限がかかるようになっています。それじゃ、アクセスできませんね・・・。
#対応
ということで、httpd-vhosts.conf
にRequire all granted
を追記します。
conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName sandbox
ServerAdmin test@example.com
DocumentRoot /home/sandbox/htdocs/
ErrorLog /home/sandbox/logs/error_log
CustomLog /home/sandbox/logs/access_log combined
<Directory /home/sandbox/htdocs>
Options FollowSymlinks Includes
AllowOverride All
AddType text/html .html
# ここを変更
Require all granted
</Directory>
</VirtualHost>
Apacheを再起動して、再度ブラウザでアクセス。無事に表示されました。