WEBサーバーを公開するときに、間に入ってナイスな働きをしてくれるリバースプロキシを触る機会がありました。ほぼ個人的なまとめです。
このページの目次
プロキシの種類と配置位置
リバースとあるからにはフォワードもあるんでしょ?と思った方は、するどいですね。
どっちを最初に想像するかといえば、フォワードプロキシーの方が多そうです。
パソコンなどがインターネットにアクセスするときに、プロキシ(代理)として外部とやりとりして、結果をパソコンに返してくれます。一方、リバープロキシーはWEBサーバ側でインターネットからの要求を一旦プロキシ(代理)で受けて、WEBサーバーに渡します。
http(https)プロキシとsocksプロキシ
動作プロトコルがWEB系だけでよいならhttpプロキシを、それ以外を使用するのであればsocksプロキシとなります。socksでもWEB系(http/https/ftp)を使用できます。
リバースプロキシ
さてざっくり全体像が見えてきたところで、リバースプロキシの話をしましょう。今回はSSL/TLS機能を持たないWEBサーバーに外部からアクセスするためにSSL/TLSを持たせたリバースプロキシサーバを用意する状況をイメージしてみます。
構成

外部PC–インターネット—–<ルータ>–<リバースプロキシサーバ>–<WEBサーバ>
(1)WEBサーバー
ポート80のみhttpで通信可能。プログラムおよびデータベースにアクセスする動的コンテンツあり。システムとして古い。
(2)リバースプロキシサーバ
ポート443のみhttpsで通信可能。
リバースプロキシサーバの選択
一般的にはnginxかapacheの選択になるかと思います。個人的にはnginxの方が、後発なだけに設定が簡単なような気がしますが、通常構成ではほぼ差異はなさそうです。
リバースプロキシサー特有のポイント
フォワードプロキシの場合には、クライアントブラウザに接続設定を入れるだけで、ほぼ設定完了。フォワードプロキシが代理PCのようにインターネットにアクセスしてくれていました。リバースプロキシの場合、トップレベル(階層)までは簡単な設定でつながるのですが、WEBサーバによっては、ヘッダおよびボディのレスポンスがそのままだと不適切な場合があるので、微調整するのですが、これがnginxの方が直感的にできるよなうな気がするんです。好みの問題かもですが。あとnginxの方が、高負荷に強いなどとも言われてますね。
OWZAP
動的解析ツールのOWZAPですが、6の微調整がうまく行かなかったときに非常に役立ちます。見るところは限られてますが、アクセス履歴を追って、レスポンスの状態を見れるだけでも便利です。今回はバックエンドからのヘッダの中のLocationが想定と違う動作だったので、OWZAPを使って実データの確認に使用しました。
変更ポイント
ネットの情報にある基本的な情報でほぼ設定できると思うのですが、全ての表示をフロントエンドサーバのURLで暗号化通信の元に行うということに意外と手間取りました。以下に変更ポイントを記載しておきます。
apache
ヘッダのロケーション
ProxyPassReverseではうまくいかず、最終的にロケーションを強制的に書き換えました。
Header edit Location ^http://hogehoge-back-end https://hogehoge-front-end
コンテンツ(ボディ)のリンク
こちらは以下の書式で置換を適用することで思った通りの動作となりました。
AddOutputFilterByType SUBSTITUTE text/html
Substitute ‘s|http://hogehoge-back-end|https://hogehoge-front-end|i’
ngninx
ヘッダのロケーション
proxy_pass http://hogehoge-back-end;
コンテンツ(ボディ)のリンク
sub_filter ‘http://hogehoge-back-end’ ‘https://$host’;
その他
nginxかapacheを使って、1つのミドルウエアで両方(リバースプロキシ+WEBサーバ)の機能を持たせることも出来るし、別々にすることも出来ますね。今回はWEBサーバが古いものだったので、リバースプロキシサーバは別に用意して構成することにしました。
ひさしぶりにリバースプロキシーの設定の機会があったので記事にしてみました。
ちなみにOWZAPの本来の使い方はDASTです。そう、IPAの試験とかで出てくるキーワード。あ、もうすぐアレの発表日近いですね。ドキドキドキ。いつもは結果が出るまで書かなかったアノ試験です。。今回こそ花咲けなのですが!
記事の途中でアノ試験の結果発表が近いことでつい言葉がこぼれ出てしまいました。リバースプロキシとかSSLアクセラレータ、ロードバランサーとか、試験問題の構成にちょくちょく出てきますものね。
