TL;DR;
仕事中にapacheのmod_proxyを利用して別サイトのリソースをあたかも自サイトのコンテンツのように見せるような設定をした際にモジュールの使い方に苦戦したため備忘録。
以下のモジュールについて記述する。
- mod_proxy
※記述が複雑にならないよう今回は全てhttp
通信を前提とする(https通信の場合は上記に加えてmod_sslも必要となり補足が必要となってしまうため)
前提
以下のような構成とする
- 自サーバホスト名 :
dondon.co.jp
- リバプロ経由でリクエストする別サーバのホスト名 :
ponpon.co.jp
※自サーバのapacheの設定でmod_proxy
をロードし、リバースプロキシとして動作させるための設定が完了していること
やりたいこと
今回の例は以下のようなケースとする
- クライアントから
http://dondon.co.jp/pon/
というURLでリクエストを投げられた場合にhttp://ponpon.co.jp/
へプロキシリクエストを送信し、そこからコンテンツを取得したい - でもクライアントからは
http://dondon.co.jp/pon/
にリクエストをしているように見せて、ponpon.co.jp
ホストの存在は認識させないようにしたい - ponpon.co.jpからponpon.co.jpのいずれかのコンテンツへのリダイレクト要求が返って来た時に
Locationヘッダ
のURLにponpon.co.jpへのURLが表示されないように隠蔽したい(http://dondon.co.jp/pon/~~
へリクエストし直すようにしたい)
特定のURLでリクエストされた場合にクライアントに認識させたくないホストのコンテンツをレスポンスしたい!
加えて、認識させたくないホストから同ホストのいずれかのコンテンツへのリダイレクト要求が返ってきた場合にもクライアントに認識させたくないホストのURLが出ないようにしたい!
なんていうケースがあった場合に参考になると嬉しい
httpd.confの編集
別にhttpd.confじゃなくても/conf.d/
配下に切り出してもいい。そこは状況次第。
やりたいことで書いたようなことをやるために必要な設定は以下となる。
ServerName dondon.co.jp
ProxyPass /pon/ http://ponpon.co.jp/
ProxyPassReverse /pon/ http://ponpon.co.jp/
各行について1つずつ解説。
-
ServerName
自サーバのホスト名を定義しておく -
ProxyPass
(ServerName)/pon/
へのアクセスが内部的にhttp://ponpon.co.jp/
へのプロキシリクエストに変換される -
ProxyPassReverse
プロキシリクエスト先のホストからリダイレクト要求が返ってきた場合にLocationヘッダに記載されているリダイレクト先のURLに、http://ponpon.co.jp/
が含まれている場合、当該箇所を(ServerName)/pon/
に書き換える
※例えば、プロキシリクエスト先からhttp://ponpon.co.jp/hogehoge/
にリダイレクトしてくれって要求が来たら、WEBサーバはクライアントに対して(ServerName)/pon/hogehoge/
でリダイレクトしてくれという風にLocationヘッダを書き換える
こうすることによってクライアントからはponpon.co.jp
のホストを認知することができなくなる
備考
ProxyPassの代わりにmod_rewrite
のRewriteRuleを使うとリライト対象とするURLを正規表現のような条件で指定することができ、より詳細な設定をすることができる。