Apache + mod_jk + 各種アプリケーションサーバの設定方法
はじめに
ほとんどのJava EEのアプリケーションサーバは、Javaで実装した独自のWebサーバを持っている。 通常はそのWebサーバを利用すればよいのだが、運用の都合などにより、時々前段にApacheを配置することがある。 その時のために、mod_jkを利用してAJPでApacheと各種アプリケーションサーバを連携させる設定方法をメモしておく。
ただ、前段にApacheを配置する場合でも、通常はmod_proxy_httpを利用してHTTPで繋げればよいのだが。。。
環境
OSはUbuntu 16.04 LTSを利用。
$ uname -srvm
Linux 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016 x86_64
Javaは導入済みであることを前提とする。
設定手順
Apache と mod_jk をインストール
ここでは、お手軽なのでapt-getでインストール。
$ sudo apt-get install apache2 libapache2-mod-jk
次にmod_jkの設定を行うために、jk.confを編集。 念のためバックアップをとった後に編集する。
$ cd /etc/apache2/mods-available
$ sudo cp jk.conf jk.conf.org
$ sudo vi jk.conf
デフォルトのjk.confではまともに動作しないので、余分な項目を削って、以下の内容にしておく。
<IfModule jk_module>
JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
</IfModule>
/etc/apache2/mods-enabledにシンボリックリンクを作成してmod_jkを有効化。
$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/jk.load jk.load
$ sudo ln -s ../mods-available/jk.conf jk.conf
現在有効なサイト(デフォルトでは/etc/apache2/sites-enabled/000-default.conf)に、AJPの転送元と転送先のマッピング(JkMount)を追加。
<VirtualHost *:80>
# (略)
JkMount /* ajp13_worker
</VirtualHost>
最後に、Apacheを再起動。
$ sudo systemctl restart apache2
Tomcat 8の場合
デフォルトでAJPのポート(8009)がオープンされているので、特段の設定は不要でTomcatを起動するだけ。
$ cd /path/to/tomcat
$ bin/catalina.sh start
参考: Apache Tomcat 8 Configuration Reference - The AJP Connector
GlassFish 4の場合
GlassFish 4のディレクトリに移動後、管理コマンドを利用してドメインの起動とAJPリスナを作成。
$ cd /path/to/glassfish4
$ bin/asadmin start-domain domain1
$ bin/asadmin create-network-listener --protocol http-listener-1 --listenerport 8009 --jkenabled true jk-connector
参考: GlassFish 4.0 Administration Guide
WildFly 10の場合
WildFly 10のディレクトリに移動後、WildFlyをバックグラウンドで起動し、そして管理コマンドを利用してAJPリスナを作成。
$ cd /path/to/wildfly10
$ bin/standalone.sh &
$ bin/jboss-cli.sh --connect
[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/ajp-listener=myListener:add(socket-binding=ajp, scheme=http, enabled=true)
参考: WildFly Admin Guide - AJP listeners
Jetty 9の場合
Jetty 9はAJPには未対応。 Jetty 8まではAJPに対応していたらしい。
参考: Jetty - Howto - Configure AJP13
動作確認
http://localhostとhttp://localhost:8080にアクセスして、それぞれ同じ画面(各アプリケーションサーバのトップ画面)が表示されればOK。 ブラウザのキャッシュに引っかからないように、強制リフレッシュ(Google ChromeだとCTRL + F5)したほうがよい。