今回は、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