プロキシモジュールの組み込み
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が取得できるようになった。