なんとか、apache2.0が動くようになったみたいです。
今回は、めっちゃはまった~(汗)
まずは、動機から。
subversionと言うバージョン管理ツールがあります。こいつをリモートから使うには、sshを使うか、svnservを使うか、davを使うかのどれかになるのですが、折角なのでdavを使おうと思ったのが事の始まりです。
今までは、apache1.3+modsslでしたが、davを使うためにはapache2系でないとなりません。
そこで、apache2を入れようと思って調べたところ、mod_perl2がperl5.8以上を要求してきました。
以前システムのperl5.0から5.6にしたときには、単にperl5.6をインストールしてからp5-*をportupgrade -f すれば良かったのですが、5.6から5.8はそう簡単に行きません。(行くのかも知れないけど、portupgradeの使い方がわからない)
で、まずはapache1.3やperl5.6のアンインストールです。
apacheに依存しているmod_php4や、perlに依存しているamavisd, spamassassinなどもすべてアンインストールになるため、一度postfixも止めました。
で、泣きながらperl5.8.4をインストールし、perl関係のライブラリをインストールし、apache2.0.50をインストールしました。
モジュール系は、mod_perl2やmod_jk2-apache2など、apache2用のものを選んで入れました。apache2用がわかれていないものでも、makeのオプションにWITH_APACHE2やWITH_MODPERL2などを指定する必要があるものもありました。
全てのインストールが終わったら、httpd.confを1.3用のものから2.0用に書き換えなくてはなりません。
とりあえず、DocumentRootなどのパスを指定する系を書き換えて、apacheを起動してみました。
・・・が、エラーが出て起動しません。
どうも、2.0になってこの辺の解釈が厳しくなったみたいです。
・・・が、ファイルのダウンロードのダイアログが出て、ページが表示されません。
なんで~?と思っていろいろ調べたのですが、どうも content-typeをtext/htmlとして送ってくれていないようです。
さんざん悩んだ挙句、httpd.confではなくて、.htaccessの方に書いてあったSSIの設定のせいでした。
ページには、ちゃんとmetaタグでcharsetが指定してあるのですが、関係なく iso-8859-1として認識されてしまうようです。
これについては、httpd.confのAddDefaultCharsetをデフォルトのISO-885-1から以下のように変更しました。
マニュアルのとおりに、
ちなみに、proxy経由でアクセスする場合、ブラウザ(IE)の設定で、「プロキシ接続でHTTP 1.1を使用する」にチェックをしていないと、圧縮が有効になりませんでした。
mod_perlとmod_perl2の違いを解説しているページなどを見ながら、一生懸命ためした結果、
どうも、mod_perlのAPI自体が変わってしまったために、MT自身を書き換えないといけないようです。(最後に出てたエラーは、Apache::Cookie関連でした)
と、言うわけで、とりあえずmod_perl2でMTを動かすのは諦めることにしました。
さて、長くなったので、DAVとsubversionは別のエントリーにすることにします。
今回は、めっちゃはまった~(汗)
まずは、動機から。
subversionと言うバージョン管理ツールがあります。こいつをリモートから使うには、sshを使うか、svnservを使うか、davを使うかのどれかになるのですが、折角なのでdavを使おうと思ったのが事の始まりです。
今までは、apache1.3+modsslでしたが、davを使うためにはapache2系でないとなりません。
そこで、apache2を入れようと思って調べたところ、mod_perl2がperl5.8以上を要求してきました。
以前システムのperl5.0から5.6にしたときには、単にperl5.6をインストールしてからp5-*をportupgrade -f すれば良かったのですが、5.6から5.8はそう簡単に行きません。(行くのかも知れないけど、portupgradeの使い方がわからない)
で、まずはapache1.3やperl5.6のアンインストールです。
apacheに依存しているmod_php4や、perlに依存しているamavisd, spamassassinなどもすべてアンインストールになるため、一度postfixも止めました。
で、泣きながらperl5.8.4をインストールし、perl関係のライブラリをインストールし、apache2.0.50をインストールしました。
モジュール系は、mod_perl2やmod_jk2-apache2など、apache2用のものを選んで入れました。apache2用がわかれていないものでも、makeのオプションにWITH_APACHE2やWITH_MODPERL2などを指定する必要があるものもありました。
全てのインストールが終わったら、httpd.confを1.3用のものから2.0用に書き換えなくてはなりません。
とりあえず、DocumentRootなどのパスを指定する系を書き換えて、apacheを起動してみました。
・・・が、エラーが出て起動しません。
VirtualHostの設定が変わっている
うちの場合は、VirtualHostを使って、http用に二つのホスト名、https用に一つのホスト名を使っているのですが、* port と non-* port を混ぜて使えないよ!みたいなエラーが出てapacheが起動しません。どうも、2.0になってこの辺の解釈が厳しくなったみたいです。
NameVirtualHost www.example.com <VirtualHost www.example.com:80> </VirtualHost> <VirtualHost www.other.com:80> </VirtualHost> <VirtualHost www.example.com:443> </VirtualHost>のような構成だったのですが、
NameVirtualHost www.example.com:80 <VirtualHost www.example.com:80> </VirtualHost> <VirtualHost www.other.com:80> </VirtualHost> NameVirtualHost www.example.com:443 <VirtualHost www.example.com:443> </VirtualHost>のように直すことで起動するようになりました。
ページが表示されない!
apacheが起動したので、早速ブラウザからアクセスしてみます。・・・が、ファイルのダウンロードのダイアログが出て、ページが表示されません。
なんで~?と思っていろいろ調べたのですが、どうも content-typeをtext/htmlとして送ってくれていないようです。
さんざん悩んだ挙句、httpd.confではなくて、.htaccessの方に書いてあったSSIの設定のせいでした。
Options +Includes AddType text/x-server-parsed-html .html AddType text/x-server-parsed-html .htmのように書いてあったのですが、apache2ではSSIを使うためには以下のように書くのでした。
Options +Includes AddOutputFilter INCLUDES .html AddOutputFilter INCLUDES .htmSSIが、OutputFilterで実現されるようになったみたいです。
日本語が化ける!
これで、いよいよページが表示されるようになりました!が、文字が化けています。ページには、ちゃんとmetaタグでcharsetが指定してあるのですが、関係なく iso-8859-1として認識されてしまうようです。
これについては、httpd.confのAddDefaultCharsetをデフォルトのISO-885-1から以下のように変更しました。
AddDefaultCharset Off
mod_gzipからmod_deflateへ
今までは、apache1.3にmod_gzipを追加して使っていたのですが、apache2.0からはmod_deflateがデフォルトで付いてきます。マニュアルのとおりに、
SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-varyのように書くことで有効になりました。ログに圧縮率を出したかったので、
DeflateFilterNote ratio LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{ratio}n%%" combinedの記述も追加しておきました。
ちなみに、proxy経由でアクセスする場合、ブラウザ(IE)の設定で、「プロキシ接続でHTTP 1.1を使用する」にチェックをしていないと、圧縮が有効になりませんでした。
最後の難関mod_perl2
MovableTypeを高速化するmod_perl。是非、今まで通り動いて欲しいところですが、動かないんだな、これが。mod_perlとmod_perl2の違いを解説しているページなどを見ながら、一生懸命ためした結果、
PerlSetEnv PERL5LIB /var/www/docs/cgi-bin/mt/lib:/var/www/docs/cgi-bin/mt/extlib PerlModule Apache::Registry <Directory "/var/www/docs/cgi-bin/mt"> SetHandler perl-script PerlHandler Apache::Registry PerlModule Apache::DBI Options +ExecCGI PerlSendHeader Off </Directory>と言う設定だったものを、
PerlSetEnv PERL5LIB /var/www/docs/cgi-bin/mt/lib:/var/www/docs/cgi-bin/mt/extlib PerlModule Apache2 PerlModule ModPerl::Registry PerlModule Apache::DBI <Directory "/var/www/docs/cgi-bin/mt"> SetHandler perl-script PerlResponseHandler ModPerl::Registry Options +ExecCGI PerlOptions -ParseHeaders </Directory>と書き換えて、さらにスクリプトの実行ディレクトリがmod_perlのときとは変わってしまうので、mtのスクリプトを書き換えたりしましたが、結局うまく行きませんでした。
どうも、mod_perlのAPI自体が変わってしまったために、MT自身を書き換えないといけないようです。(最後に出てたエラーは、Apache::Cookie関連でした)
と、言うわけで、とりあえずmod_perl2でMTを動かすのは諦めることにしました。
さて、長くなったので、DAVとsubversionは別のエントリーにすることにします。