なんとか、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を起動してみました。
・・・が、エラーが出て起動しません。

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 .htm
SSIが、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は別のエントリーにすることにします。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: apache2.0への移行

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/681

コメントする

このブログ記事について

このページは、falseが2004年7月 7日 13:34に書いたブログ記事です。

ひとつ前のブログ記事は「apache2.0」です。

次のブログ記事は「DAV」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1