mod_jk で apache と winstone を連携させる
apache の Virtual Host 設定下で、winstone との連携をすることにしたのでそのメモ。
手順
- Apache は 2.0 系
- winstone 0.9.10
apxs がないのでインストール
$ su
# yum install yum install httpd-devel.i386
mod_jk のソースをダウンロードして make , mod_jk.so の配置
tomcat-connectors-1.2.30-src.tar.gzをここから入手。
$ cd native
$ ./configure --with-apxs=/usr/sbin/apxs
$ make
make が完了すると apache-2.0/mod_jk.so ができている。 これを apache のモジュールディレクトリ(/etc/httpd/modules/)にコピーする。
apache の設定
/etc/httpd/conf/httpd.conf を修正
1) mod_jk のモジュール追加記述
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
#JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
#JkMount /*.gsp ajp13
#JkMount /* ajp13
JkMountはここでは設定しない。 Virtual Host の設定内で指定する。
JkLogLevel で debug としておくと、 ログ(ここでは、/etc/log/httpd/mod_jk.log)に大量のメッセージが出るため 設定中でトラブルシューティングしている場合は大変便利です。
2) workers.properties
JkWorkersFile で指定した場所に以下の内容で /etc/httpd/conf/workers.properties を配置。
workers.tomcat_home=/usr/local/winstone
workers.java_home=/usr/local/jdk
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
psはパスの区切り文字らしい。*unix では ps=/ でOK.
3) Virtual Host の設定
以下の指定をイキにする。
ServerName *:80
NameVirtualHost *:80
4) Virtual Host 関係の個別設定と JkMount設定
<VirtualHost *:80>
ServerAdmin foo@sample.net
DocumentRoot /var/www/vhost/blog
ServerName blog.sample.net
ErrorLog logs/www-error_log
CustomLog logs/www-access_log common
#JkMount /*.gsp ajp13
JkMount /* ajp13
</VirtualHost>
JkMount の記述では、どのリクエストがきたら ajp13 へ渡すかを指定。 ここではすべてのリクエストを ajp13 へ転送(つまり全部 winstoneで処理する)。
winstone の起動設定
winstoneのドキュメント を参考に。
winstone の起動時に以下のオプションを指定して起動。
winstonejar=bin/winstone-0.9.10.jar
JAVACMD=java
JAVA_OPTS="-Xms48m -Xmx48m"
$JAVACMD $JAVA_OPTS -jar $winstonejar \
--javaHome=$JAVA_HOME \
--webroot=htdocs \
--httpPort=8080 \
--ajp13Port=8009 \
--useJasper \
#--logfile=logs/log
--ajp13Port=8009がポイント。いったんうまく作動したら --httpPort=-1 にすればよい。