アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング Apache 基盤技術

Windows10で検証用のプロキシサーバを構築

投稿日:


本番環境でプロキシを介して通信を行うアプリを開発したいが、開発環境ではプロキシがない…
そんな時のためにローカルに検証用のプロキシサーバを構築してみます。

概要

  • Windows 10(64ビット)環境を使用します。
  • プロキシサーバとしてWindows向けのApacheを使用します。使用するバージョンは、Apache Loungeの2.4.43-win64-VS16です。
  • ここではあくまでの開発環境での検証を目的としているため、最低限の設定内容になっています。本番使用を想定する場合はセキュリティや性能等の考慮した設定を検討してください。

構築手順

  1. Windows用のApacheバイナリをダウンロード
    Apacheのダウンロードページから[Files for Microsoft Windows]のリンクを開きます。
    ApacheHaus, Apache Lounge等のいくつかのバージョンがありますが、ここではApache Loungeの[httpd-2.4.43-win64-VS16.zip]をダウンロードします。
  2. ダウンロードファイルの展開
    今回使用するファイル群は[C:\devproxy]配下に置くルールとして、このフォルダを作成後にダウンロードしたzipファイルを展開します。
    (結果として[C:\devproxy\httpd-2.4.43-win64-VS16\Apache24]が作成されるイメージです。)
  3. httpd.confの編集
    一旦、httpd.confをhttpd.conf.org等に退避し、httpd.confを次のように編集します。
    詳細はApacheのリファレンスを参考のこと。
    ...
    #
    # 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.so
    LoadModule negotiation_module modules/mod_negotiation.so
    LoadModule proxy_module modules/mod_proxy.so
    #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule 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:80
    ServerName devproxy:8888
    
    ...
    # フォワードプロキシ設定
    <IfModule proxy_module>
    
    	ProxyRequests On
    	ProxyVia 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にしても影響はないと思われる。)
  4. apachenの起動
    [C:\devproxy\httpd-2.4.43-win64-VS16\Apache24\bin]にあるhttpd.exeを実行します。

動作確認

アプリで確認する場合

アプリでプロキシ設定を行い、通信を試行します。
その後、access.logを開き、通信のログが記録されていることを確認します。

...
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上の様々なアプリの通信で、今回構築したプロキシが使われます。
大事なセッションがある場合は終了してから本手順を実施してください。
また、動作確認後、プロキシの設定を元に戻すことを忘れずに。



(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, Apache, 基盤技術

執筆者:

関連記事

ASP.NET Core: IHttpClientFactoryの使用方法

ASP.NET Coreや.NET CoreでWebAPIの実行等のHTTP通信を行う場合はHttpClientを使用できますが、HtppClientが想定する利用シナリオを理解して使用しないと、大き …

JSFラジオボタン・チェックボックスとbootstrap

boostrapでラジオボタンやチェックボックスを使用する場合、div, input, label要素にbootstrapのCSSクラスを指定する必要がある。 JSFでラジオボタンを使用する場合、se …

PowerPointの削除できない個人情報を消す

PowerPointで「個人情報の削除」を実行するとこで、作成者や会社名等の個人情報を削除できます。しかしながら、特定の項目に入った個人情報については、PowerPointやWindowsの標準機能で …

テキストファイルマスクツール

本番環境での性能検証でNGになってしまった。 どの処理でどれほどの処理時間がかかっているかを把握するためにログレベルを変更して、ログを取得した。 対応方法を自社の担当者と検討するために、本番環境からこ …

CentOS7のマルチホーム化

サイトの存在を隠しつつも、sftpサーバを公開し、後輩と1G以上のファイルのやりとりしたい。 パブリック側のIPアドレスを教えてしまうと、どこのサーバだろうかとブラウザで開いたりするとサイトの存在がわ …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る