ProxyRemote ディレクティブを使って多段プロキシを構成してみた

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【3/22開催】テックブログを書こう!アウトプットのススメ
1年で100本ブログを出した新米エンジニアがPV数が伸びなくてもTech Blogを書き続ける理由とは?
https://tech-lab.connpass.com/event/312805/

【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは。サイオステクノロジーの貝野です。

プロキシサーバとして 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 10080


  ProxyRequests 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 10080


  ProxyRequests 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 系でも同様の設定を使うことができます。

アバター画像
About 貝野 友香 67 Articles
OSSよろず相談室でサポートをやっています。時々ライブ配信や勉強会に出ていることもあります。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる