Apacheサーバー設定のトラブルシューティング
この記事では、Apacheサーバーを運用している時に起こったトラブル解決を備忘録的に紹介します。
client denied by server configurationエラー
Apache のエラーログで「client denied by server configuration:」と出た時の対処法。放っておいても問題はなさそうだが、Apacheのエラーログを見やすくしたいため細かいエラーを徹底的になくしていく。 バーチャルホストでの運営なので、バーチャルホストの設定ファイル、virtualhost.conf を開く。
「Require all granted」を記述するする。
<VirtualHost *:80>
ServerName hogehoge.xxxxxxxxx.com
DocumentRoot /somewhere/hogehoge
<Directory "/somewhere/hogehoge">
Require all granted
</Directory>
<VirtualHost>
Apache 再起動。 /etc/rc.d/init.d/httpd restart
これで解決したと思ったが、今度は下記のエラーが出てしまった。 configuration error: couldn't perform authentication. AuthType not set!:
「Require all granted」はApache2.4系の書き方のようだ。 でApacheのバージョンを確認してみる。 httpd -v
やはり2.4以前のバージョンがインストールされていた。 この場合「Require all granted」ではなく「Order allow,deny」「Allow from all」と書くようだ。 なので、最終的な書き方は次のようになる。
<VirtualHost *:80>
ServerName hogehoge.xxxxxxxxx.com
DocumentRoot /somewhere/hogehoge
<Directory "/somewhere/hogehoge">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
これで解決!と思ったが、またエラーが出てしまった。 client denied by server configuration:
その後、Apacheはやめてnginxへ移行。もっと早く移行しておけばよかったと思うくらい、設定が簡単で快速に動く。 nginxで爆速サーバー構築
バーチャルホストで.htaccessが無視される?
「バーチャルホストのドメインでアクセス」した場合と「メインドメイン + フォルダを指定してアクセス」した場合の動作が、異なることを発見した。前者では.htaccessが読み込まれないようす。原因は「AllowOverride None」を追記したから。下のように「AllowOverride All」としたら.htaccessの設定が反映されるようになった。
<VirtualHost *:80>
ServerName hoge.xxxxxxxxxxx.com
DocumentRoot /home/xxxxxxxxxxx/hoge
<Directory "/home/xxxxxxxxxxx/hoge">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Directory index forbidden by Options directiveエラーとFile does not exist favicon.ico
Apacheで発生したアクセスエラーログ。
Directory index forbidden by Options directive: /xxxx/アクセスされたフォルダに、index.htmlが置かれていないために発生するようだ。 このフォルダにはアクセスされることを想定していないため、空のindex.htmlを置いて解決する。 しかし今度は、ブラウザがfaviconをリクエストするために下記のエラーが発生してしまった。
File does not exist: /xxxx/favicon.ico, referer: http://xxxx.com/空のfaviconを作成して、index.htmlと同じディレクトリにおけば解決する。
cat /dev/null > favicon.ico