今回は大学のプロジェクトの関係でmod_jkによるApache-Sailfin連携環境を構築する機会があったので未来の自分のためにもここで紹介しておこうと思う。というのも、一年もすれば確実にやり方を忘れてしまいそうなので。。。
さて、mod_jkを使ったApacheとTomcatの連携はよく知られているけど、ApacheとSailfinでも結果的に同じことが可能であった。ただやり方はちょっと面倒くさい。
ちなみにSailfinとは
- オープンソースアプリケーションサーバー
- ベースはGlassfish
- Sip Servletが使える
- 管理・Netbeansを使うと開発が簡単
というアプリケーションサーバーである。ベースがGlassfishということなので、
この記事あたりを参考にすれば普通にできるかなぁと思ったので今回試してみました。
構築環境:
OS: Ubuntu Server 8.04
Apache(httpd): Apache 2.28
mod_jkのバイナリ 1.2.27
1. mod-jkをインストールする。mod-jkが我がサーバーにはないので、まずは
ここからダウンロードする。
Apacheのバージョン情報に応じてダウンロードするものが違うみたいなので、下記のコマンドを実行し出力されたApacheのバージョンに合ったモジュールをダウンロードする。
/usr/sbin/apache2ctl -v (もしくはhttpd -v など実行)
ダウンロードしたモジュールをmod-jk.soとリネームして/usr/lib/apache2/modulesに配置する。
続いてmod_jk.confとworkers.propertiesを下記を参考にして作成し、/etc/apache2/confに配置する。
[mod_jk.conf]
JkWorkersFile /etc/apache2/conf/workers.properties
# Where to put jk logs
JkLogFile /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat: set the request format
JkRequestLogFormat "%w %V %T"
# Send all jsp requests to Sailfin
JkMount /examples/*.jsp ajp13
# Send all XMLTester/XmlService requests to Sailfin
JkMount /XMLTester/XmlService ajp13
(注)JkMount->場合によってはVirtualHostごとに設定が必要。
[workers.properties]
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.cachesize=10
worker.ajp13.cache_timeout=600
worker.ajp13.socket_keepalive=1
worker.ajp13.socket_timeout=300
次は/etc/apache2/mods-availableにmod_jk.confとmod_jk.loadを作成し、
/etc/apache2/mods-enabledからシンボリックリンクを張る。
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/mod_jk.load mod_jk.load
sudo ln -s ../mods-available/mod_jk.conf mod_jk.conf
[mod_jk.load]
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
[mod_jk.conf]
<IfModule mod_jk.c>
Include /etc/apache2/conf/mod_jk.conf
</IfModule>
最後にApacheを再起動します。
sudo /etc/init.d/apache2 restart
2. AJPコネクタモジュールなどをインストール。Apache Jakarta Projectからcommons-logging-1.1.1.jarを入手します。
Tomcat 5.5.16のserver/libに含まれている下記の2ファイルをコピーします。
- tomcat-ajp.jar
- commons-modeler.jar
ここで下記3ファイルをsailfinがインストールされたディレクトリ(例えば/usr/share/sailfin)のlibディレクトリにコピーします。
- tomcat-ajp.jar
- commons-logging-1.1.1.jar
- commons-modeler.jar
Sailfinをあらかじめ起動しておき、SailfinのbinディレクトリにあるasadminコマンドでJVMオプションを追加します。
asadmin
create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009
(Sailfinディレクトリ)/domains/(ドメイン名)/configディレクトリに以下の内容でsailfin-jk.propertiesファイルを作成。他サイトの情報によるとこれをやらないとREMOTE_USER情報がSailfinに渡されないとのこと。
[sailfin-jk.properties]
tomcatAuthentication=false
続いて設定するドメインに応じて下記コマンドを変更した上で実行し、Sailfinが
sailfin-jk.propertiesをロードするようにする。
asadmin create-jvm-options
-Dcom.sun.enterprise.web.connector.enableJK.propertyFile=
/usr/share/sailfin/domains/domain1/config/sailfin-jk.properties
最後にドメインを再起動して終了です。
後は適当なJSPファイルを使ってちゃんと動いているか確認してください。
asadmin stop-domain domain1
asadmin start-domain domain1
お疲れ様でした。
[参考サイト]
http://www.office-matsunaga.biz/dev/description.php?id=6http://weblogs.java.net/blog/jfarcand/archive/2006/03/running_glassfi_1.html