manatee-itの備忘ログ

プログラム初心者のブログ。ruby on railsでWebサービスを作成中。(仕事が忙しくなかななか進まず) つまずいた所をなんでも記録。 環境:Ruby2.1 + Rails4.1.1 + Passenger + CentOS6.4(Apache + sqlite/MySQL)

Apache + Tomcatの連携手順のメモ

■まえおき

Apache + Tomcatの連携手順のメモ
記載時点のTomcat最新のバージョン(9.0.34)では2点ほど問題が発生したため、解消方法を記載した。
動作させるための最低限の設定のみであり、セキュリティの設定は記載していない。
Apache TomcatGUI 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 httpdTomcatの連携

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 httpdTomcatの連携に失敗する。

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/