TomcatとApacheのAJPによる連携設定

カテゴリ:Java

CentOS/Ubuntu 両対応

Apache側の設定

プロキシの準備

CentOS の場合:

Apacheで受けたリクエストをTomcatに転送する場合、httpd-proxy.confファイルに転送の設定を記述します。
そのため、まずhttpd.confファイルに、httpd-proxy.confをインクルードする設定を記述します。

Include conf/httpd-proxy.conf

次に /etc/httpd/conf/httpd-proxy.conf ファイルを作成します。

# touch /etc/httpd/conf/httpd-proxy.conf

Ubuntu の場合:

/etc/apache2/mods-available/proxy_ajp.conf ファイルを作成します。

転送設定を記述

/etc/httpd/conf/httpd-proxy.conf(Ubuntuの場合は/etc/apache2/mods-available/proxy_ajp.conf)に転送の設定を記述します。
以下の例では、/phpPgAdmin/ は転送を除外(Apacheで処理する)、/ と /mobile/、/article_entry/ はTomcatに転送します。
評価順序は上からになるため、範囲の広い / の設定は最後、除外設定(ProxyPass /xxx/ !)は最初に記述します。

ProxyPass /phpPgAdmin/ !
ProxyPass /mobile/ ajp://localhost:8009/mobile/
ProxyPass /article_entry/ ajp://localhost:8009/article_entry/
ProxyPass / ajp://localhost:8009/

※「ProxyPass /xxx/ !」は除外(転送しない)を意味します。
※「8009」ポートは、Tomcatの「AJP 1.3」用のコネクタポートです。

Ubuntu の場合は a2enmodコマンドで proxy と proxy_ajp モジュール、a2enconf コマンドで proxy_ajp.conf の設定を有効にします。

# a2enmod proxy
# a2enmod proxy_ajp
# a2enconf proxy-ajp

設定後、以下のコマンドで Apache を再起動します。

CentOS の場合:

# systemctl restart httpd

Ubuntu の場合:

# systemctl restart apache2

Tomcat側のAJPの設定(Tomcat 8.5.51 以降)

AJPポートの有効化

Tomcat 8.5.51 以降では初期設定でAJPポート(8009ポート)が無効になっているため、有効にする必要があります。

$CATALINA_HOME/conf/server.xml で以下の設定のコメントを解除します。

<!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    -->

変更後:

<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />

次に secretRequired="false" のパラメータを追加し、address の値を "localhost" に変更します。

変更後:

<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               address="localhost"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               secureRequired="false" />

Note Apache Tomcat 8.5.51 以降では secretRequired パラメーターがデフォルトで true に設定されるため false に設定するか secret を指定するかいずれかの対処が必要です。
また、address="::1" のままだと IPv4 のループバックアドレスである 127.0.0.1 でリスンされません。

AJP転送で 8080 ポートが不要であれば以下のように設定をコメントアウトして、8080 ポートを無効にしてください。

<!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    -->

また、Tomcat で SSL(HTTPS)のページ (CONFIDENTIAL のページ) を構成している場合は、以下のコメントアウトを解除して 8443 ポートを有効にし、証明書を適切に設定してください。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true"
               maxParameterCount="1000"
               >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

Tomcat を再起動して設定を反映します。

# systemctl restart tomcat

公開日時:2014年08月09日 08:29:24
最終更新日時:2024年03月30日 12:21:11

なお、VPS選びで迷ったらこちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

Javaに戻る

このページのトップに戻る