apache リバースプロキシの設定

プロキシモジュールの組み込み

LoadModule proxy_module libexec/mod_proxy.so
LoadModule proxy_http_module libexec/mod_proxy_http.so

ディレクティブの設定方法

リバースプロキシ:www.hogehoge.com
バックエンドサーバ:backend.hogehoge.com

ProxyPass / http://backend.hogehoge.com/
ProxyPassReverse /news/ http://backend.hogehoge.com/

※ProxyPass 公開パス 転送先URLの並びとなる。

※ProxyPass
リクエスト URL のマッピング
ここでは、http://www.hogehoge.com をhttp://backend.hogehoge.com/にマッピングさせている

※ProxyPassReverse
HTTP レスポンスの Location, Content-Location, URI-header を書き換えるために記述する。

※クッキーヘッダ等の操作も設定できるが、以下を参照してほしい。
apache2.2:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
apache2.4:http://httpd.apache.org/docs/current/en/mod/mod_proxy.html

備考

今回、以下構成を作成していた。

  big-ip
    |
    |----|
    |    |
 proxy  web

※proxyはx-servletを想定し、今回はapacheで作成した。

WEBサーバへの通信経路は下記のようにする

クライアント    bigip       proxy     web
      |---------->|           |        |
      |           |---------->|        |
      |           |           |        |
      |           |<----------|        |
      |           |           |        |
      |           |------------------->|
      |           |           |        |
      |           |<-------------------|
      |           |           |        |
      |<----------|           |        |
      |           |           |        |
      |           |           |        |

big-ip:192.168.1.3
proxy :192.168.153.130
web   :192.168.153.128

vs-ip1 :192.168.1.130
   →プロキシサーバへの通信

vs-ip2 :192.168.1.128
   →プロキシからウェブへの通信

このような構成の時ににクライアントIPをwebに渡すにはどうするか考えていた。

① big-ipでinsert X-Forwarded-Forを使用する。
② proxyで設定する。

①の方法は動的に読み込んでくれるし、設定が楽なため、採用。
②について
proxyが本当はx-servletで作成したかったことと、以下のような違いがあり、
本物でテストしないと意味がないため、不採用。
・apacheはリバースプロキシを使用すると、デフォルトでX-Forwarded-Forを付与してくれる。
・x-servletはデフォルトでX-Forwarded-Forは付与されない。

また、x-servletでX-Forwarded-Forを設定することもできるが、なんか難しそうだ。

そのため、apacheで作成したリバースプロキシで、X-Forwarded-Forを付与されないようにした。

しかし、apache2.2は付与されないようにできない。必ず付与されてしまう。
そのため、apache2.4をインストールした。

apache2.4だと、ProxyAddHeadersディレクティブがあり、offにすることが可能。
※デフォルトはOn
http://httpd.apache.org/docs/current/en/mod/mod_proxy.html#proxyaddheaders

これでproxyでは、X-Forwarded-Forは付与されなくなった。

vs-ip2で、insert X-Forwarded-Forをenableに変更すると、無事、クライアントIPが取得できるようになった。

おすすめの記事