はじめに
APIを作成してデプロイした際に躓いたので、投稿します。
連携とは具体的にApache側で受け取ったHTTPリクエストをリバースプロキシでTomcatに投げます。
環境
- Windows10
- Java JDK 1.8.0.222
- Apache HTTP Server 2.4.56
- Tomcat 9.0.73
※インストール方法は省略します。私はC:ドライブ直下にファイルを置きました。
Apacheの設定
以下の設定ファイルを編集します。
C:¥Apache24¥conf¥httpd.conf
リバースプロキシ用のモジュールを有効化
以下の2文がコメントアウトされているので、#
を外して有効にしましょう。
...
LoadModule proxy_module modules/mod_proxy.so
...
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
...
リバースプロキシの設定
末尾に以下を追加します。
...
ProxyPass /{リクエストパス} ajp://localhost:8009/{コンテキスト名}
ProxyPassReverse /{リクエストパス} ajp://localhost:8009/{コンテキスト名}
警告
Tomcatでデプロイするとwarファイル名がそのままコンテキスト名になります。
warファイル名がsample.war
であればsample
がコンテキスト名です。
リクエストパスを/api
としたければ以下のようになります。
...
ProxyPass /api ajp://localhost:8009/sample
ProxyPassReverse /api ajp://localhost:8009/sample
私はここの設定を誤って、躓きました;;
デフォルトのポート番号を変更(任意)
Apacheでデフォルトのポート番号は80番なのですが、
...
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
...
私のWindowsでは何かのシステムに占有されていたので8080に変更しました。
...
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8080
...
以上で「http://localhost:8080/api
のリクエストが来たら8009番ポートに投げる」設定ができました!
次に、Tomcatで8009番ポートの接続設定を行います。
Tomcatの設定
以下の設定ファイルを編集します。
C:¥apache-tomcat-9.0.73¥conf¥server.xml
8080番ポートの停止
以下の記述をコメントアウトします。
...
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
...
8009番ポートでの接続設定
以下の文字列を追加します。コメントアウトした部分の直後に追加しました。
...
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
protocol="HTTP/1.1"
secretRequired="false"
redirectPort="8443" />
...
以上で8009番ポートでAJP通信を受け付けることができます!
Tomcatへのデプロイ
以下にwarファイルを配置してTomcatを起動します。
C:¥apache-tomcat-9.0.73¥webapps
デプロイの詳細に関しては省略します。
まとめ
WindowsでApacheとTomcatを連携する方法でした。
Linuxの記事が多かったり、記事自体が古かったりしたので更新する意味を込めて書きました。
リバースプロキシの設定は、リクエストパスとコンテキスト名に注意してください。
私はこの部分を適当に流していました。コンテキスト名でリクエストを送り続け、長い時間”NotFound”状態でした(応答も解決策も)。いっそのこと同じ名前ににしてしまうのもアリかと思います!