Apache + Tomcatの連携手順のメモ
■まえおき
Apache + Tomcatの連携手順のメモ
記載時点のTomcat最新のバージョン(9.0.34)では2点ほど問題が発生したため、解消方法を記載した。
動作させるための最低限の設定のみであり、セキュリティの設定は記載していない。
Apache TomcatのGUI Webアプリケーションマネージャは利用しない。
■環境
CentOS 7.2
httpd-2.4.6-93.el7.centos.x86_64
java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
apache-tomcat-9.0.34.tar.gz
※インストールパス
/opt/tomcat9
■Firewalld設定
予めhttpが許可されていることを確認
# firewall-cmd --list-ports # firewall-cmd --permanent --add-service=http # firewall-cmd --list-services --zone=public --permanent # firewall-cmd --list-services --permanent
※Tomcatの8080を公開したい場合は以下を設定
# cat /etc/firewalld/services/tomcat.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>Tomcat (HTTP)</short> <description>Tomcat HTTP Server.</description> <port protocol="tcp" port="8080"/> </service> # firewall-cmd --permanent --add-service=tomcat # systemctl restart firewalld.service # firewall-cmd --list-all
■Apache 2.4インストール
# yum -y install httpd httpd-devel
自動起動有効化とサービス起動
# systemctl enable httpd.service # systemctl start httpd.service
確認
# systemctl is-enabled httpd.service # systemctl status httpd.service
トップページ確認(ブラウザ)
http://(IPアドレス)/
ログ出力確認
/var/log/httpd/access_log
/var/log/httpd/error_log
■JDKインストール
・OpenJDKを使用する場合(今回はこちら)
# yum -y install java-1.8.0-openjdk-devel
・OracleJDKを使用する場合
以下を参照
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
切り替え確認
# alternatives --config java # alternatives --config javac
バージョン確認
# java -version # javac -version
■Apache Tomcat 9 インストール
インストールパス
/opt/tomcat9/
ダウンロードと展開
※2020/05/03現在の最新(apache-tomcat-9.0.34)
以下のURLで最新版を確認
Tomcat 9 Software Downloads
http://tomcat.apache.org/download-90.cgi
# cd /usr/local/src # wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz # tar zxf apache-tomcat-9.0.34.tar.gz # mv apache-tomcat-9.0.34 /opt/tomcat9 # ls -l /opt/tomcat9
基本設定
# cat /etc/profile.d/tomcat.sh export CATALINA_HOME=/opt/tomcat9 export CATALINA_BASE=/opt/tomcat9 # source /etc/profile.d/tomcat.sh
tomcatユーザ作成
# useradd -M -d /opt/tomcat9 -s /sbin/nologin tomcat # chown -R tomcat:tomcat /opt/tomcat9 # id tomcat
自動起動設定
以下を記載
# cat /usr/lib/systemd/system/tomcat9.service [Unit] Description=Apache Tomcat Servlet Container After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment=CATALINA_BASE=/opt/tomcat9 Environment=CATALINA_HOME=/opt/tomcat9 ExecStart=$CATALINA_HOME/bin/startup.sh ExecStop=$CATALINA_HOME/bin/shutdown.sh ExecReStart=$CATALINA_HOME/bin/shutdown.sh;$CATALINA_HOME/bin/startup.sh KillMode=none [Install] WantedBy=multi-user.target
自動起動有効化とサービス起動
# systemctl enable tomcat9.service # systemctl start tomcat9.service
確認
# systemctl is-enabled tomcat9.service # systemctl status tomcat9.service
トップページ確認(ブラウザ)
http://(IPアドレス):8080/
FWを許可していない場合
# curl http://localhost:8080
ログ出力確認
catalina.YYYY-MM-DD.log
catalina.out
localhost.YYYY-MM-DD.log
localhost_access_log.YYYY-MM-DD.txt
■Apache httpd と Tomcatの連携
httpdのモジュールの確認
以下の設定を確認
# cat /etc/httpd/conf.modules.d/00-proxy.conf | grep -e mod_proxy.so -e mod_proxy_ajp.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ロードされていることを確認
# cat apachectl -M | grep -e proxy_module -e proxy_ajp_module proxy_module (shared) proxy_ajp_module (shared)
httpdのプロキシ設定
以下を設定
# cat /etc/httpd/conf.d/proxy.conf ProxyPass / ajp://localhost:8009/
Tomcat設定
以下の設定を実施
/opt/tomcat9/conf/server.xml
修正前
<!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> ->
修正後
<Connector protocol="AJP/1.3" apddress="localhost" #IPv4環境向けに修正 port="8009" redirectPort="8443" secretRequired="false" /> #明示的に"false"を記載する
【発生エラーその1】
コメント記載の設定ではIPv6環境用のアドレスとなっていたため、IPv4のみの環境ではポートがListenとならないので、削除もしくは以下に修正する。
address="::1"
↓
apddress="localhost"
【発生エラーその2】
「secretRequired="false"」を記載しないと、以下のメッセージが発生し、Apache httpdとTomcatの連携に失敗する。
tail -f /opt/tomcat9/logs/catalina.out : (メッセージ日時) SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to start component [Connector[AJP/1.3-8009]] org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1066) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:438) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:633) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474) Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid. at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:264) at org.apache.catalina.connector.Connector.startInternal(Connector.java:1063)
不要Tomcatポートの無効化
Tomcatのページ用の8080ポートの設定は無効化する。
<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
トップページ確認(ブラウザ)
http://(IPアドレス)/
■参考にしたURL
Apache httpd と Tomcat を連携させる方法 | WEB ARCH LABO
Apache Tomcat 9 を CentOS 7 にインストールする手順 | WEB ARCH LABO
Cent OS 7上でApache/Tomcat開発環境を構築する - Qiita
ApacheとTomcatを連携させてみた - Qiita
https://disconnect.no-ip.org/wordpress/2020/02/14/apache-tomcat-9-0-31%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%97%E3%81%9F%E3%82%89%E3%82%A8%E3%83%A9%E3%83%BC%E7%99%BA%E7%94%9F/