タイトル: プロキシ
プロキシとは
クライアントの代理としてサーバーと通信するサーバー(プロキシサーバー)。クライアントとインターネット上のサーバーの間に立ち、リクエスト・レスポンスを中継します。
用途としては通信の安全化、高速化が挙げられる。
プロキシの種類
| 種類 | 役割 | 典型的な利用例 |
|---|---|---|
| フォワードプロキシ | クライアント側に立ち、外部への通信を中継 | 社内からインターネット接続、フィルタリング、キャッシュ |
| リバースプロキシ | サーバー側に立ち、外部からのリクエストを内部サーバーに振り分け | ロードバランサ、SSL終端、Nginx / Apache mod_proxy |
| 透過プロキシ | クライアントが意識せずに経由するプロキシ | ISPやキャリアでの中継 |
| SOCKSプロキシ | TCP/UDPレベルの汎用プロキシ | SSHトンネル、Tor |
プロキシで実現できること
- アクセス制御 — 特定ドメインへのアクセス遮断、社内向けフィルタリング
- キャッシュ — 同じコンテンツを複数クライアントが取得する場合の効率化
- ログ収集 — どのクライアントがどのサイトに接続したかの監査
- 匿名化 — クライアントIPを隠す(VPN/Tor等)
- SSL終端 — リバースプロキシでHTTPS処理を集約
- ロードバランシング — 複数の内部サーバーに振り分け
プロキシを使う設定例
環境変数で設定(Linux/Mac)
|
$ export http_proxy=http://proxy.example.com:8080 |
curlで一時的に指定
|
$ curl -x http://proxy.example.com:8080 https://example.com |
git でプロキシ設定
|
$ git config --global http.proxy http://proxy.example.com:8080 |
Nginx でリバースプロキシ
|
server { |
注意点
- 多くのアプリは
http_proxy/https_proxy環境変数を読む。設定が反映されないときはHTTP_PROXY(大文字)も試す - HTTPS のリバースプロキシでは、上流(アプリ側)に渡るリクエストは平文HTTPになる場合がある。
X-Forwarded-Protoヘッダで判定する - 社内プロキシ環境では
npm/composer/pipも別途プロキシ設定が必要 - プロキシ経由でも認証情報は暗号化される(HTTPS)が、CONNECTメソッドは内容が見えない点はメリット/デメリット両面
関連
- 親カテゴリ: ネットワーク
- 関連: Apache HTTP Server (リバースプロキシとしても使える)