概要
引き継いだ案件で同一サーバー内に別サイトを仕込むとのことで、
バーチャルホストの設定をしようとしたら新しいサイトの方が403
エラーが出てしまうといった内容です。
設定内容(失敗の時)
vhost.conf
には以下のように記載していました。
#既存サイトの設定
<VirtualHost *:80>
ServerName hogehoge.com
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
Options FollowSymlinks Includes
AllowOverride All
</Directory>
</VirtualHost>
#今回追加した設定
<VirtualHost *:80>
ServerName fugafuga.com
DocumentRoot /home/test_user/public
<Directory /home/test_user/public>
Options FollowSymlinks Includes
AllowOverride All
</Directory>
</VirtualHost>
設定内容(OKの時)
#既存サイトの設定
<VirtualHost *:80>
ServerName hogehoge.com
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
Options FollowSymlinks Includes
AllowOverride All
</Directory>
</VirtualHost>
#今回追加した設定
<VirtualHost *:80>
ServerName fugafuga.com
DocumentRoot /home/test_user/public
<Directory /home/test_user/public>
Options FollowSymlinks Includes
AllowOverride All
Require all granted ←追加
</Directory>
</VirtualHost>
原因
結論:デフォルトのアクセス制限に引っかかっていた。
解説
まずデフォルトの設定を見てみます。
/etc/httpd/conf/httpd.conf
#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
AllowOverride none
Require all denied
</Directory>
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
上記を見ると
Directory
の/
配下はデフォルトでRequire all denied
。つまりアクセスを拒否しています。
次に
Directory
の/var/www
配下はデフォルトでRequire all granted
。つまりアクセスが許可されています。
ということは
以下のどちらかで対応すべきだったということです。
・ドキュメントルートを/var/www
配下以外に設定する場合はRequire all granted
でアクセス許可してあげる
・新しいサイトのドキュメントルートを/var/www
配下にする
余談
最初は色んな記事を漁っていると「指定しているドキュメントルートまでの権限がないのでは?」というのが多かったです。
なので/home/test_user/public
のパーミッションを全て確認しましたが、どれも許可されていたので結構時間がかかってしまいました。。
他の記事を見るとRequire all granted
がApache2.4から変わったところだそうなので、以前のバージョンの記述をしてハマっている人もいたようです。
WEBサーバーの知識ももっと取り入れたほうがいいですね。勉強させて頂きました。