Apache Httpd2.4とTomcat9の連携
環境
- Apache Httpd 2.4.37: dnfでインストール
- Apache Tomcat 9.0.33: ソースからインストール(/usr/local/tomcat/)
- AJP1.3
- CentOS8
インストールの詳細は以前の記事を参照。
https://wankomagic.hatenablog.com/entry/2020/04/09/165254
Httpdの設定
/etc/httpd/conf.modules.d/00-proxy.conf に以下があることを確認する。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
/etc/httpd/conf.d/tomcat.conf (名前は何でもよい)にTomcatへのリダイレクトの設定を記述する。tomcat側でキーワードチェックをしない場合はsecret=passwordの記述は不要。
ProxyPass /docs/ ajp://localhost:8009/docs/ secret=password
ProxyPass /examples/ ajp://localhost:8009/examples/ secret=password
Tomcatの設定
/usr/local/tomcat/conf/server.xml のHostタグ内にAJPからのアクセスに対するリダイレクトの設定を記述する。コメントアウトで書かれているのでコメントアウトを外して、secret="pasword"を追記する。secretの値はhttpdで設定したものにする。
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
secret="password"
redirectPort="8443" />
secretは9で追加されたAJPアクセスに関するセキュリティ設定。8ではrequiredSecretに該当するが、デフォルトnullではエラーになる(503)。secretRequired="false"を記述してチェックしないようにするか、secret="httpdで記述したキーワード"を記述してチェックを通すようにする必要がある。
https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html
SELinuxの設定
Httpdから別のポートへの接続を許可する。
setsebool -P httpd_can_network_connect on
RHEL7公式ドキュメント
httpd_senuxのマニュアル
https://linux.die.net/man/8/httpd_selinux
これを知ったのは次の記事で、ポリシー設定は他にもある。触ってみながら、ポリシーを見直す。
https://computingforgeeks.com/install-apache-tomcat-9-on-linux-rhel-centos/
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_network_relay 1
sudo setsebool -P httpd_graceful_shutdown 1
sudo setsebool -P nis_enabled 1
Httpd, Tomcatを再起動して、ブラウザから動作確認する。
補足
- 2020/5/25 AJPコネクタのキーワードチェック無効にしていた記述を、キーワード設定する記述に修正
- 参考: AJPコネクタの件は正しくはtomcat9.0.31から。apache httpdにsecretが指定できるのは2.4.42から。
https://qiita.com/polarbear08/items/f016a0675e6c9637e7b8 - 参考: tomcat9.0.31のAJP対応の経緯。セキュリティパッチなので、tomcat8でも最新版を使うと同じ対応が必要。
https://wizsafe.iij.ad.jp/2020/03/929/