■まえおき
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
# 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
インストールパス
/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
# 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
以下の設定を確認
# 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)
以下を設定
# cat /etc/httpd/conf.d/proxy.conf
ProxyPass / ajp://localhost:8009/
以下の設定を実施
/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のページ用の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/