Apache/Tomca連携で調べたことをメモっておく(特に目新しい内容はないけど・・・)。
前提
- 特定のパス(例:
/hello
)のみTomcatに連携し、それ以外のパス(HTML、CSS、JavaScriptなどの静的コンテンツ)へのアクセスはApacheのドキュメントルートにあるファイルを応答 - Tomcatアプリにはコンテキストパスがある(例:
/app
) - Tomcatへの連携はAJP経由で行う(HTTPではなくAJPを使う理由は特に触れないw)
Apacheの設定
Apacheに以下の設定を追加する。
# コメントアウトされている場合はコメントを除去
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# ...
# リバースプロキシの設定
ProxyRequests Off
ProxyPass /hello ajp://ap:8009/app/hello
# レスポンスヘッダー値からコンテキストパスを除去
ProxyPassReverse / /app/
# クッキーパスの書き換え
ProxyPassReverseCookiePath /app /
検証アプリ
バックエンドアプリをSpring Boot(組み込みTomcat)で作っていることに特に意味はなし。単にTomcatインストールして・・・設定追加して・・・とかが面倒だっただけ。実際・・・調べた内容を反映することになる実アプリは・・・Spring Bootアプリじゃない(ってかSpringも使ってない)w
でもって、検証アプリでは以下の動作を検証した。
Apache管理のリソースへのアクセス
単純にApacheのドキュメントルート内で管理しているリソースへアクセスしてみる。
Tomcat管理のリソースへのアクセス
Apache経由でTomcatで管理しているリソースへアクセスしてみる。リバースプロキシの確認をするために意図的にリダイレクトしている。なお、Springのフラッシュスコープを使うことでセッション(=クッキー)連携の検証も行っている。
TomcatからApache管理のリソースへのリダイレクト
念のため・・・実アプリのエラーパターンも確認しておく。
補足
リバースプロキシの設定はヘッダー値の書き換えは行うが、レスポンスBODY内にあるURLの書き換えは行われない。
レスポンスBODYの中にあるコンテキストパスを除去する場合は・・・
- mod_substitute
- mod_actions
- mod_ext_filter
- mod_proxy_html
などを使う必要があるが、今回は未検証。