Apache と Tomcat を連携する

今回は、HTTPサーバーの Apache と Java サーブレットコンテナ の Tomcat を連携する手順を以下にまとめます。

また、今回の構成は以下のとおりです。

  • Amazon Linux 2023
  • OpenJDK 17
  • Apache 2.4
  • Tomcat 10.1

それぞれのインストール手順については、以下を参照してください。

mod_proxy モジュールの確認

以下のコマンドを実行して mod_proxy モジュールが存在していることを確認します。

# モジュールの確認
ls /etc/httpd/modules | grep -e mod_proxy.so -e mod_proxy_ajp.so

# 実行結果
mod_proxy.so
mod_proxy_ajp.so

Tomcat のAJP コネクタの設定

Tomcat の server.xml ファイルを編集し、AJPコネクタを設定します。以下は設定ファイルの例です。

# エディタを起動して設定ファイルを開く
sudo vi $CATALINA_HOME/conf/server.xml

# AJP コネクタの設定を追加
    <Connector protocol="AJP/1.3"
               port="8009"
               redirectPort="8443"
               secretRequired="false" />

# 8080 の接続をコメントアウト
# 修正前
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />

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

Apacheの仮想ホストの設定

Apache の設定ファイルで、Tomcat へのリクエストをプロキシするための仮想ホストを設定します。以下は、設定ファイルの例です。

# エディタを起動して設定ファイルを開く
sudo vi /etc/httpd/conf/httpd.conf

# 設定ファイル(例)
# 最後に以下を追加
<VirtualHost *:80>
  ServerName example.com

  ProxyPass / ajp://localhost:8009/
  ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

上記の例では、Apache がポート 80 でリクエストを受け取り、それを AJP プロトコルを介して Tomcat のポート 8009 にプロキシします。ServerName を適切なドメインに変更してください。

再起動

Apache と Tomcat を再起動して変更を有効にします。

# Apache と Tomcat の再起動
sudo systemctl reload httpd.service
sudo systemctl restart tomcat.service

# 確認
curl -s http://localhost | grep title

参考) SELinux 有効時のアクセス制限について

SELinux が有効になっている場合、Apache の SELinux ポリシーによって Apache が外部のリソースにアクセスするのを制限されています。

getsebool コマンドを実行して、状態を確認します。

# Apache のポリシーを確認
getsebool httpd_can_network_connect

# 制限されている場合
httpd_can_network_connect --> off

# 制限されていない場合
httpd_can_network_connect --> on

setsebool コマンドを実行して、制限の有効・無効を設定します。

# 有効化する場合
sudo setsebool -P httpd_can_network_connect 1

# 無効化する場合
sudo setsebool -P httpd_can_network_connect 0

投稿日

カテゴリー:

,

投稿者: