こんにちは。サイオステクノロジーの貝野です。
プロキシサーバとして Apache を使用している環境において、さらに別のプロキシサーバを経由してインターネット(接続先サーバ)に接続したい場合、ProxyRemote というディレクティブを使用します。
今回は、ProxyRemote ディレクティブを使って別のプロキシサーバを経由させる検証をしてみました。
■ 環境
今回、検証を行なった環境の構成は以下の通りです。
————————-
[クライアント] <—> [プロキシサーバ1] <—> [プロキシサーバ2] <—> [接続先サーバ]
————————-
クライアント
- IP アドレス:192.168.1.10
- OS のバージョン:CentOS7.6
プロキシサーバ1
- IP アドレス:192.168.1.101
- OS のバージョン:CentOS7.6
- Apache のバージョン:httpsd-2.4.6-90.el7
プロキシサーバ2
- IP アドレス:192.168.1.102
- OS のバージョン:CentOS7.6
- Apache のバージョン:httpsd-2.4.6-90.el7
接続先サーバ
- IP アドレス:192.168.1.20
- OS のバージョン:CentOS7.6
- Apache のバージョン:httpsd-2.4.6-90.el7
■ 設定・動作確認 (リバースプロキシの場合)
各サーバの設定を、それぞれ以下の様にします。
プロキシサーバ1 (192.168.1.101)
Listen 10080 ProxyPass / https://192.168.1.20/ ProxyRemote * https://192.168.1.102:10080
- プロキシのポートに 10080 を指定
- ProxyPass に “https://<接続先サーバの IP アドレス>/” を指定
- ProxyRemote に “https://<プロキシサーバ2の IP アドレス>:<ポート番号>” を指定
プロキシサーバ2 (192.168.1.102)
Listen 10080 ProxyPass / https://192.168.1.20/
- プロキシのポートに 10080 を指定
- ProxyPass に “https://<接続先サーバの IP アドレス>/” を指定
接続先サーバ (192.168.1.20) のコンテンツ
# cat /var/www/html/test.html test page
クライアント (192.168.1.10) から接続先サーバへアクセス
curl -x https://192.168.1.101:10080 https://192.168.1.20/test.html test page
この時、プロキシサーバ1 およびプロキシサーバ2 の access_log には、それぞれ以下の情報が出力されます。
プロキシサーバ1
192.168.1.10 - - [28/Jan/2020:15:26:11 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"
プロキシサーバ2
192.168.1.101 - - [28/Jan/2020:15:26:11 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"
■ 設定・動作確認 (フォワードプロキシの場合)
各サーバの設定を、それぞれ以下の様にします。
プロキシサーバ1
Listen 10080ProxyRequests On Order deny,allow Deny from all Order deny,allow Deny from all Allow from 192.168.1.10 ProxyRemote * https://192.168.1.102:10080
- プロキシのポートに 10080 を指定
- Proxy に “https://<接続先サーバの IP アドレス>/*” を指定
- Allow from にクライアントの IP アドレスを指定
- ProxyRemote に “https://<プロキシサーバ2の IP アドレス>:<ポート番号>” を指定
プロキシサーバ2
Listen 10080ProxyRequests On Order deny,allow Deny from all Order deny,allow Deny from all Allow from 192.168.1.101
- プロキシのポートに 10080 を指定
- Proxy に “https://<接続先サーバの IP アドレス>/*” を指定
- Allow from にプロキシサーバ1の IP アドレスを指定
クライアント (192.168.1.10) から接続先サーバへアクセス
curl -x https://192.168.1.101:10080 https://192.168.1.20/test.html test page
この時、プロキシサーバ1 およびプロキシサーバ2 の access_log には、それぞれ以下のログが出力されます。
プロキシサーバ1
192.168.1.10 - - [28/Jan/2020:15:46:45 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"
プロキシサーバ2
192.168.1.101 - - [28/Jan/2020:15:46:45 +0900] "GET https://192.168.1.20/test.html HTTP/1.1" 200 10 "-" "curl/7.29.0"
■ 最後に
Apache でプロキシサーバを構成する場合において、最も基本的な多段プロキシの設定をご案内しました。
なお今回は Apache 2.4 系で動作検証しましたが、Apache 2.2 系でも同様の設定を使うことができます。