本番環境でプロキシを介して通信を行うアプリを開発したいが、開発環境ではプロキシがない…
そんな時のためにローカルに検証用のプロキシサーバを構築してみます。
概要
- Windows 10(64ビット)環境を使用します。
- プロキシサーバとしてWindows向けのApacheを使用します。使用するバージョンは、Apache Loungeの2.4.43-win64-VS16です。
- ここではあくまでの開発環境での検証を目的としているため、最低限の設定内容になっています。本番使用を想定する場合はセキュリティや性能等の考慮した設定を検討してください。
構築手順
- Windows用のApacheバイナリをダウンロード
Apacheのダウンロードページから[Files for Microsoft Windows]のリンクを開きます。
ApacheHaus, Apache Lounge等のいくつかのバージョンがありますが、ここではApache Loungeの[httpd-2.4.43-win64-VS16.zip]をダウンロードします。 - ダウンロードファイルの展開
今回使用するファイル群は[C:\devproxy]配下に置くルールとして、このフォルダを作成後にダウンロードしたzipファイルを展開します。
(結果として[C:\devproxy\httpd-2.4.43-win64-VS16\Apache24]が作成されるイメージです。) - httpd.confの編集
一旦、httpd.confをhttpd.conf.org等に退避し、httpd.confを次のように編集します。
詳細はApacheのリファレンスを参考のこと。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647...## ServerRoot: The top of the directory tree under which the server's...#Define SRVROOT "c:/devproxy/httpd-2.4.43-win64-VS16/Apache24"...## Listen: Allows you to bind Apache to specific IP addresses and/or...## 安全のためlocalhostを指定(ローカルからのアクセスのみ可能)Listen 127.0.0.1:8888...#LoadModule mime_magic_module modules/mod_mime_magic.soLoadModule negotiation_module modules/mod_negotiation.soLoadModule proxy_module modules/mod_proxy.so#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so#LoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_connect_module modules/mod_proxy_connect.so#LoadModule proxy_express_module modules/mod_proxy_express.so...#LoadModule proxy_html_module modules/mod_proxy_html.so#LoadModule proxy_http_module modules/mod_proxy_http.so#LoadModule proxy_http2_module modules/mod_proxy_http2.so......## ServerName gives the name and port that the server uses to identify itself....##ServerName www.example.com:80ServerName devproxy:8888...# フォワードプロキシ設定<IfModule proxy_module>ProxyRequests OnProxyVia On# Listenでlocalhost指定する前提であり、アクセス制御不要</IfModule>- 6行目: Apacheの基準フォルダ
- 14行目: ローカルホスト(ループバックアダプタ)の8888ポートで要求を受け付ける。(ループバックアダプタを使用するため、別のPCからのアクセスは不可。)
- 19,22行目: フォワードプロキシとして動作するためにはmod_proxy_connectと、このモジュールが依存するmod_proxyを有効にする。(なお、mod_proxy_http等の他のモジュールは不要であった。)
- 36行目: 起動時の警告を回避するために適当な名前を指定した。
- 39-47行目: フォワードプロキシを有効にするためにProxyRequestsをOn、経由したプロキシを示すViaヘッダを付与するためにProxyVia Onを指定します。
(リファレンスのサンプル値を使用しています。ProxyViaの既定はOffであり、宣言を消したりOffにしても影響はないと思われる。)
- apacheの起動
次のhttp.exeを実行します。C:\devproxy\httpd-2.4.43-win64-VS16\Apache24\bin\httpd.exe
動作確認
アプリで確認する場合
アプリでプロキシ設定を行い、通信を試行します。
その後、access.logを開き、通信のログが記録されていることを確認します。
1 2 3 4 5 6 7 | ... 127.0.0.1 - - [21/Apr/2020:23:15:00 +0900] "CONNECT www.yahoo.co.jp:443 HTTP/1.1" 200 - 127.0.0.1 - - [21/Apr/2020:23:15:05 +0900] "CONNECT b5.yahoo.co.jp:443 HTTP/1.1" 200 - 127.0.0.1 - - [21/Apr/2020:23:15:06 +0900] "CONNECT yjtag.yahoo.co.jp:443 HTTP/1.1" 200 - 127.0.0.1 - - [21/Apr/2020:23:16:18 +0900] "CONNECT play.google.com:443 HTTP/1.1" 200 - 127.0.0.1 - - [21/Apr/2020:23:16:24 +0900] "CONNECT play.google.com:443 HTTP/1.1" 200 - ... |
ブラウザで確認する場合
Windowsの設定(Windowsキー+i)を開き、[ネットワークとインターネット]の[プロキシ]を選択します。
[プロキシサーバを使う]をOnに変更し、プロキシサーバを指定し、[保存]をクリックします。
その後、ブラウザで任意のWebアクセスが行えることや、上記と同様にaccess.logにログが記録されていることを確認します。
この設定を行うとWindows上の様々なアプリの通信で、今回構築したプロキシが使われます。
大事なセッションがある場合は終了してから本手順を実施してください。
また、動作確認後、プロキシの設定を元に戻すことを忘れずに。