Apacheでリバースプロキシを作る。

サマリ

リバースプロキシとなるサーバを準備し、Apacheをインストールした上で下記の設定をする。

# vi /etc/httpd/conf/httpd.conf
■Apache2.2.15の場合 ※Apache2.4.37でも同様の設定可
<IfModule mod_proxy.c>の後ろに以下を追記
ProxyRequests Off
ProxyPass / http://<Webサーバ>/ retry=10
ProxyPassReverse / http://<Web-Server>/

リバースプロキシとは…

プロキシは、クライアントーサーバ間の通信に入り、代理応答するもの
解決したい課題に応じてフォワードとリバースを使い分けて実装する。
例えば、不特定多数のユーザが利用するシステムの場合、
リバースプロキシを採用する必要が賢明である。

Forward Proxy、Reverse Proxy
インターネット接続は必須ではない。概念を理解しやすいように記載している。

■フォワードプロキシ(一般的に言われるプロキシ):
 クライアント側のネットワーク、または、第三者のネットワークなど、
 サーバ側のネットワーク以外に存在する。
 プロキシを利用するために、クライアント端末側で設定が必要

■リバースプロキシ:
 サーバ側のネットワークに存在する。
 プロキシを利用するために、クライアント端末側で設定は不要

リバースプロキシの用途

リバースプロキシを使う用途として、主に下記のようなものがある。
・負荷分散:
  リバースプロキシ上で負荷分散機能を有効にすることにより、
  複数のサーバに通信を振り分けることで負荷分散ができる。
・キャッシュを使った高速化:
  リバースプロキシ上でキャッシュ機能を有効にすることにより、
  静的なデータをリバプロ上でキャッシュし、代理応答させることで
  クライアントに対する応答の高速化とサーバに対する負荷軽減ができる。
・異種のアプリ統合:
  複数のアプリ、サーバ構成されるサービスを単一サイトに見せかけることで、
  利用者が利用するサービスに合わせて接続先を変更する必要がなくなる。
・セキュリティ強化:
  リバースプロキシをDMZなどの公開エリアに配置させることで、
  サーバを直接、インターネットやクライアントに晒す必要がなくなり、
  セキュリティリスクを低減できる。
・SSL通信の集中管理:
  サーバが配備されているネットワークは傍受、改ざんがなく安全と考え、
  クライアントーリバースプロキシ間の通信をSSLで暗号化する場合、
  リバースプロキシ上でSSL通信用のサーバ証明書を一括管理し、
  暗号化処理させることでサーバ毎に証明書の管理、暗号化処理が不要となる。
・通信経路の集約
  クライアント~サーバ間で静的にNAT変換を行っている場合、
  NAT変換テーブルの上限以上の端末が登録できず、
  端末の増減があれば随時テーブルを更新する必要がある。
  プロキシで接続することでクライアントがサーバと直接通信しないため、
  通信経路、設定を集約できる。

設定方法

Reverse Proxy、リバースプロキシ

上記の構成のリバースプロキシサーバに対する設定を記載する。

 0.OSをインストールし、Apacheをインストールする。(以下Linux想定)

 1.下記のファイルを編集する。

# vi /etc/httpd/conf/httpd.conf

■Apache2.2.15の場合 ※Apache2.4.37でも同様の設定可
<IfModule mod_proxy.c>の後ろに以下を追記
ProxyRequests Off
ProxyPass / http://<Web-Server>/ retry=10
ProxyPassReverse / http://<Web-Server>/

 2.サービスを再起動する。

■CentOS6、RHEL6などの場合
# service httpd restart

■CentOS7~、RHEL7~などの場合
# systemctl restart httpd

 3.動作確認としてクライアント端末から、リバプロサーバにアクセスする。

  クライアント端末のブラウザで、下記の通りアクセスする。

http://<Reverse-Proxy>/

  リバースプロキシに対して接続要求しているにも関わらず、
  Web-Serverのコンテンツが表示されれば、成功。

補足)設定値の意図
・リバースプロキシの「retry」オプション デフォ:60秒 → 10秒
 転送先のWebサーバが停止、通信不可になるとリバースプロキシとの接続が切断されるが、
 転送先のWebサーバとの通信が復旧した場合、リバースプロキシが自動的に再接続を試みる。

 再接続を試みる間隔は、デフォルト60秒のため、通信が復旧していても最大60秒間待たされる。
 よりタイムリーに接続再開できるように、リトライ間隔を短くする。

 ただし、極端に短い時間に設定した場合、復旧に対する反応は良くなる一方で、
 接続できない間もリトライを繰り返すため、webサーバに再接続できない間、
 プロキシサーバの負荷が一時的に高くなるため、
 システムの特性、要件に合わせて調整が必要となる。

※その他のオプション設定はデフォルト値を利用

注意事項

・ファイアウォールのポート開放が必要である。
 リバースプロキシがクライアントの通信を受ける必要があるため、
 リバースプロキシのFW、及び途中経路のポート開放が必要となる。

・リバースプロキシで名前解決が必要である。
 リバプロのhttpd.confにサーバ名称で登録する場合、
 リバプロがサーバ接続できる必要ガアあるため、
 hostsファイルやDNS等を使って名前解決できなければならない。

参考

Apache モジュール mod_proxy
リバースプロキシ(Reverse Proxy)
リバースプロキシとは?プロキシとの違いや仕組み、利用するメリットを解説

コメント

タイトルとURLをコピーしました