ploneとapacheの連携見直しをしていたらまともに動かなくて丸一日はまった。1つのサーバに2つのドメインを割り当てて、そえぞれVIrtualHostでアクセスされたURLごとに振り分けて別々のDocumentRootを見に行くようにしている。既に動いているWordPressなどへのアクセスはそのまま通し、それ以外についてはPloneで作ったサイトが見えるようにしようとしたのだが、連携させるとエラーになる。
httpd-vhost.confでは、
<VirtualHost *:80>
ServerAdmin apj@cm.kj.yamagata-u.ac.jp
ServerName cml-office.org
ServerAlias www.cml-office.org
DocumentRoot “/home/WWW/cml-office”
ErrorLog “logs/cml-office-error_log”
CustomLog “logs/cml-office-access_log” common
<Directory “/home/WWW/cml-office”>
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
</Directory>
RewriteEngine On
RewriteRule ^/archive – [L]
RewriteRule ^/v2log – [L]
RewriteRule ^/memolog – [L]
RewriteRule ^/action – [L]
……のように、そのままアクセスさせたいディレクトリをまず全部書いてから、
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/www.cml-office.org:80/official/VirtualHostRoot/$1 [L,P]
で、トップページへのアクセスをPloneで作ったofficialというインスタンスを表示させるように設定したのだけど、これがinternal server errorで落ちる。rewriteの失敗かと思って、ログをとってみることにした。
ログの取り方は、 apache2.4以降は、config中に
LogLevel alert rewrite:trace3
と書く。
tail -f error_log|fgrep ‘[rewrite:’
で、関連部分のみ抜き出す、という方法でできる。で、やってみたのだけど目立ったエラーが出ていない。きちんと動いている別サーバのログと比べても問題があるように見えない。
結局、apache側で、
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
あたりを入れただけでは足りなくて、
LoadModule proxy_html_module modules/mod_proxy_html.so
や
LoadModule proxy_http_module modules/mod_proxy_http.so
も有効にしておかないとダメらしい。この2つが有効であるようにしてからは意図通りに動くようになった。
なお、Plone側は、ZMIで、/に行って、右上のプルダウンからVirtual Host Monsterを選んでAddしておく必要がある(が、普通にインストールすると入ってるような……)。