BLOGTIMES
2016/10/01

Apache と Tomcat の連携時に一部のパスだけ Proxy しない方法

  tomcat  httpd  integration 
このエントリーをはてなブックマークに追加

Apache と Tomcat の連携は mod_proxy_ajp を使うと簡単に実現できます。
例えば、<Location> ディレクティブと組み合わせて以下のような設定にすると、Apache へのアクセスを全て Tomcat に向けることができます

<Location / > ProxyPass ajp://localhost:8009/ </Location>

上記の例は設定がシンプルなだけでなく、 Tomcat 側に新しいアプリを追加したような場合でもイチイチ Apache の設定を変更する必要がないので便利なのですが、Apache 側に置いてある静的なコンテンツを返したいときや、 manager や host-manager のような管理用の WebApp を Apache からアクセスさせたくないような場合などに、一部の Path だけを ProxyPass の対象から除外したいという場合があります。

これについていろいろ調べてみたところ、以下のように書くと除外パスが設定できるようです(ここでは manager と host-manager を除外しています)。

<Location / > ProxyPass ajp://localhost:8009/ </Location> # Exclude path <Location /manager/ > ProxyPass ! </Location> <Location /host-manager/ > ProxyPass ! </Location>

ちょっとわかりづらいですが、Apache で Location を複数書いた場合の扱いについては「セクションのマージ方法」に記載があるとおり、設定ファイルに現れた順番に処理(上書き)されるため、除外するパスは <Location / > の定義よりも後に書く必要があります。ProxyPass しない場合には 「!」 だけを書けば良いというのは初めて知りました。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8818
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    通りすがりのアフロマン (2017/05/17 12:22) <%HatenaAuth()%>

    除外するパスは <Location / > の定義よりも後に書く必要があります。

    除外するパスは <Location / > の定義よりも"前"の間違いでは?

    hsur (2017/05/17 16:58) <%HatenaAuth()%>

    実際に試してみれば明確に分かりますが、書いてある通りで間違いありません。
    詳細についてはリンク先の Apache のドキュメントを読んでみてください。

    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン