MENU

【Java】【CentOS】VPS上でApacheとTomcatを連携させる。

こんにちは、くまごろーです。
前回までの記事で、
 
VPSの初期設定
Apache/JDK/Tomcatをインストール
・80番ポートでApacheのテストページを表示
・8080番ポートでTomcatのテストページを表示
 
ここまでやったので、この記事ではApacheTomcatの連携についてまとめようと思います。

今回は主に以下のサイトを参考にしてやってみました。
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とは? 
 ApacheTomcatは、ajpというプロトコルを使用して連携させます。で、そもそもajpとはなんなのか?こちらのサイトの説明がわかりやすかったので引用します。

 ajpとは、Apache Jserv Protocolの略でApache HTTP ServerとApache Tomcatと連携する際に使うプロトコルです。
ajpは、TomcatajpサーバポートとTCP経由で接続するためのプロトコルです。 クライアントよりApacheが受け付けたリクエストをajpTomcatajpサーバプログラムに転送され、TomcatServletなどの処理結果をApacheにレスポンスし、Apacheがレスポンスをクライアントにレスポンスします。

Apache/Tomcatのajp連携―httpdのmod_proxy_ajp、プロトコル、設定方法。

 Tomcatは「8080番ポートで HTTPの通信を受け付け、8009番ポートで AJP の通信を受け付け」ています。「http://IPアドレス:8080」でTomcatにアクセスできるのは、この設定があるからです。つまり、ApacheTomcatを連携させるためにやらなきゃいけないのは、

・ 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"」を追記する理由
 ↓はTomcatchangelogなんだけど、

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ページが表示されるようになるはず。(-"-)