こんにちは、くまごろーです。
前回までの記事で、
・VPSの初期設定
・Apache/JDK/Tomcatをインストール
・80番ポートでApacheのテストページを表示
・8080番ポートでTomcatのテストページを表示
ここまでやったので、この記事ではApacheとTomcatの連携についてまとめようと思います。
今回は主に以下のサイトを参考にしてやってみました。
Apache httpd と Tomcat を連携させる方法 |
1 環境
一応、現在の自分の環境について記しておきます。
<VPS>
・さくらのVPS
・OS:CentOS Linux release 7.8.2003
<JDK>
・バージョン:1.8.0_262
・インストール方法:yum
<Apache>
・バージョン:Apache2.4.6
・インストール方法:yum
<Tomcat>
・バージョン:apache-tomcat9.0.37
・インストール方法:wgetで最新版をインストール
2 ajpとは?
ApacheとTomcatは、ajpというプロトコルを使用して連携させます。で、そもそもajpとはなんなのか?こちらのサイトの説明がわかりやすかったので引用します。
ajpとは、Apache Jserv Protocolの略でApache HTTP ServerとApache Tomcatと連携する際に使うプロトコルです。
ajpは、TomcatのajpサーバポートとTCP経由で接続するためのプロトコルです。 クライアントよりApacheが受け付けたリクエストをajpでTomcatのajpサーバプログラムに転送され、TomcatはServletなどの処理結果をApacheにレスポンスし、Apacheがレスポンスをクライアントにレスポンスします。
Apache/Tomcatのajp連携―httpdのmod_proxy_ajp、プロトコル、設定方法。
Tomcatは「8080番ポートで HTTPの通信を受け付け、8009番ポートで AJP の通信を受け付け」ています。「http://IPアドレス:8080」でTomcatにアクセスできるのは、この設定があるからです。つまり、ApacheとTomcatを連携させるためにやらなきゃいけないのは、
・ 8080番ポートの設定を無効化し、8009番ポートの設定を有効化する(Tomcat)
・ どんなパスにアクセスされた場合に Tomcat と連携するのかを設定する(Apache)
となります。
3 Tomcat側の設定
「opt/apache-tomcat9.0.37/conf/server.xml」を修正します。
(1)「8080番ポート」の設定をコメントアウトし、「8009番ポート」の設定のコメントアウトを削除します。
(2)8009番ポートの設定を、以下の様に変更します。
<修正前>
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> -->
<修正後>
<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <Connector protocol="AJP/1.3" address="0.0.0.0" port="8009" secretRequired="false" redirectPort="8443" />
〇備考1 「address」欄を「::1」から「0.0.0.0」に変更する理由
「::1」というのはIPv6のアドレスで、IPv6をサポートしていないサーバーだとこれが原因でエラーになるらしい。ちなみに、「0.0.0.0」はすべてのホストからのアクセスを許可するという意味
〇備考2 「secretRequired="false"」を追記する理由
↓はTomcatのchangelogなんだけど、
Rename the requiredSecret attribute of the AJP/1.3 Connector to secret and add a new attribute secretRequired that defaults to true. When secretRequired is true the AJP/1.3 Connector will not start unless the secret attribute is configured to a non-null, non-zero length String. (markt)
Apache Tomcat 9 (9.0.38) - Changelog
たぶんだけど「secretが設定されない限りは、secretRequiredがtrueだとAJPコネクターは動作しません」的な意味です。(たぶん)
つまり、secret(何らかのパスワード)を設定しないのなら、「secretRequired="false"」を設定しないとエラーになります。
4 Apache側の設定
Apache側では、TomcatへのProxyPassを設定します。
「/etc/httpd/conf/httpd.conf」ファイル内に、以下のような記述があります。
# Load config files in the "/etc/httpd/conf.d" directory, if any. IncludeOptional conf.d/*.conf
「conf.dディレクトリ内のconfファイルであれば読み込みますよ」という感じのことを言っています。
よって、「etc/httpd/conf.d/proxy-ajp.conf」ファイル(ファイル名は任意でOK)を以下の内容で作成します。
<Location /examples/> ProxyPass ajp://127.0.0.1:8009/examples/ </Location>
これで、「http://IPアドレス/examples」でTomcatのexamplesページが表示されるようになるはず。(-"-)