LoginSignup
2
2

More than 5 years have passed since last update.

apacheのmod_proxyを使ってリバースプロキシに別のホストへプロキシリクエストさせた話

Last updated at Posted at 2019-01-09

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/配下に切り出してもいい。そこは状況次第。
やりたいことで書いたようなことをやるために必要な設定は以下となる。

httpd.conf
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を正規表現のような条件で指定することができ、より詳細な設定をすることができる。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2