2019年09月13日(金) [長年日記]
■ [web][java] TomcatをApacheと連携させる方法
Tomcatの前段にリバースプロキシとしてApacheを配置し、Apache経由でTomcatにアクセスできるようにする方法を少し調べたのでメモ。試したバージョンはTomcat 8.5.39とApache 2.4.29。
リバースプロキシとして動作させるためにはApacheにモジュールを導入する必要があるが、その選択肢として次の3つがある。
モジュール名 | Apache~Tomcat間のプロトコル | メモ |
mod_proxy_http | HTTP | Apacheの同梱モジュールで導入は簡単 |
mod_proxy_ajp | AJP | Apacheの同梱モジュールで導入はまあ簡単 |
mod_jk | AJP | Tomcat側で開発されている。試してないけど上記モジュールよりは面倒そう |
mod_proxy_httpを使う場合
TomcatはデフォルトでHTTPを受け付けるようになっているので、mod_proxy_httpを使う場合はApache側の設定だけで連携を実現できる。必要な設定はモジュールのロードと要求の転送設定で、次のような感じで指定する。
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so <IfModule mod_proxy.c> ProxyPass /test http://localhost:8080/app1 ProxyPassReverse /test http://localhost:8080/app1 </IfModule>
- mod_proxy_httpを動作させるにはmod_proxyも必要なのでそれもロードする。
- ProxyPassが要求を転送するためのディレクティブ。
- ProxyPassReverseはリダイレクト先を適切にマッピングするためのディレクティブ。
- mod_proxyにはほかにも色々なディレクティブがあるので、必要に応じてそれらを使う。
mod_proxy_ajpを使う場合
mod_proxy_ajpを使うには、TomcatがAJPを受け付けるように設定する必要がある。server.xmlの中に
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
というような行があるので、これを生かす(コメントアウトを外す)ようにすればよい。
Apache側の設定はmod_proxy_httpと同様。ロードするモジュール、プロトコル名、ポート番号を変えればよい。
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so <IfModule mod_proxy.c> ProxyPass /test ajp://localhost:8009/app1 ProxyPassReverse /test ajp://localhost:8009/app1 </IfModule>