Apache + mod_jk + 各種アプリケーションサーバの設定方法

はじめに

ほとんどのJava EEアプリケーションサーバは、Javaで実装した独自のWebサーバを持っている。 通常はそのWebサーバを利用すればよいのだが、運用の都合などにより、時々前段にApacheを配置することがある。 その時のために、mod_jkを利用してAJPApacheと各種アプリケーションサーバを連携させる設定方法をメモしておく。

ただ、前段に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は導入済みであることを前提とする。

設定手順

Apachemod_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://localhosthttp://localhost:8080にアクセスして、それぞれ同じ画面(各アプリケーションサーバのトップ画面)が表示されればOK。 ブラウザのキャッシュに引っかからないように、強制リフレッシュ(Google ChromeだとCTRL + F5)したほうがよい。