先日インストールが無事終わり、使えるようになったApache2.4.3。
この後、こんなにハマるとは予想だにしていませんでした。


これまでの記事

思えばヒントは2.2から.2.4の変更点に書いてありました。



●汎用表現パーサー
新しい表現パーサーでは、SetEnvIfExpr、RewriteCond、ヘッダー、などのようなディレクティブで共通の構文を使用して複雑な条件を指定できます。


バーチャルホストの設定


いつもの設定なので、サクサクバーチャルホストの設定を行います。
まずはドキュメントルート用のディレクトリを作って、
index.htmlをコピーします。

続いて設定ファイルの変更。


# cd /usr/local/apache2/conf/
# vi extra/httpd-vhosts.conf

<VirtualHost *:80>
DocumentRoot (ドキュメントルートのパス)
ServerName (ドメイン)
ServerAlias www.(ドメイン)
ErrorLog "logs/(ドメイン)-error_log"
CustomLog "logs/(ドメイン)-access_log" common

<Directory "(ドキュメントルートのパス)">
Order Allow, Deny
Allow from all
</Directory>

</VirtualHost>


保存して、Apacheを再起動。

# /usr/local/apache2/bin/apachectl configtest
# /usr/local/apache2/bin/apachectl restart


設定したバーチャルホストがForbidden!


もと東大生もと社長の自由奔放ブログ Just do it now!-Forbiddenのページ
▲なぜかForbiddenのページが表示されます。
これで設定できているはず。

とアクセスするとForbiddenのページが表示されます。

今指定したばかりのエラーログを見ると、
AH01630: client denied by server configuration

とのこと。

ディレクティブの場所を間違えたかなと、確認してみましたが合っています。

他にも追加したのですが、そちらもアクセスできません。
DNSの設定も疑ってみましたが、こちらもきちんと設定されています。
そもそもhostsファイルに書き込みしてるから問題ない。

2.6からディレクティブが変更されていた!


Apacheのページを見てみると、なんとディレクティブが変わっていました。
<Directory "(ドキュメントルートのパス)">
Order Allow, Deny
Allow from all
</Directory>


は、2.4系では次のように書かないといけないらしい。

<Directory "/www/www/htdocs">
Require all granted
</Directory>



もと東大生もと社長の自由奔放ブログ Just do it now!-It works!のページ
▲無事表示されたIt works!のページ

変更して、再起動したところ無事It works!のページが表示されました。

まさか、こんなよく使っていたディレクティブが変更されているとは思いませんでした。
今回はこの変更に悩まされましたが、ほかにもいくつか変わっているみたいです。

MaxRequestsPerChild → MaxConnectionsPerChild
MaxClients → MaxRequestWorkers

そしてFileETagはデフォルトでINodeを参照しないように変わっています。

Apache2.4.x系の変更点
http://httpd.apache.org/docs/2.4/upgrading.html

わかりやすく変わること自体はいいことだと思いますが、
configtestの時に変わったよって教えてくれればいいのにと思ってしまいました。



ちなみに疑って書いたNameVirtualHostはいらないよって教えてくれました。
要らないのはエラー出さなくてもあまり影響ありませんが、
設定しているのに効かないのはしっかりエラー出してほしいです。
どうもチェックが中途半端な気がします。

これまでの記事