プロキシサーバーとトンネリング

インターネットのさまざまなネットワークを移動するときに、プロキシサーバーと HTTP トンネルは、 World Wide Web 上のコンテンツへのアクセスを容易にしています。プロキシはユーザーのローカルコンピュータ、またはユーザーのコンピュータとインターネット上の送信先サーバーの間の任意の場所に配置できます。このページではプロキシに関するいくつかの基本を概説し、いくつかの設定オプションを紹介します。

プロキシには、フォワードプロキシ (またはトンネルまたはゲートウェイ) とリバースプロキシ (負荷分散、認証、復号化またはキャッシュ用のサーバーへのアクセスを制御および保護するために使用される) の 2 種類があります。

フォワードプロキシ

フォワードプロキシ、またはゲートウェイ、または単に「プロキシ」は、クライアントまたはクライアントグループにプロキシサービスを提供します。インターネットには数十万もの公開プロキシが存在する可能性があります。グループによって使用される帯域幅を減らして制御するために、インターネットサービス (DNS や Web ページなど) を格納して転送します。

フォワードプロキシは匿名プロキシにすることもでき、ユーザーは Web をブラウズしたり他のインターネットサービスを使用している間に自分の IP アドレスを隠すことができます。TOR (The Onion Router) は、匿名性のために複数のプロキシを介してインターネットトラフィックをルーティングします。

リバースプロキシ

その名前が示すように、リバースプロキシはフォワードプロキシとは逆の動作を行います。フォワードプロキシはクライアント (またはリクエストホスト) に代わって動作し、リバースプロキシはサーバーに代わって動作します。フォワードプロキシはクライアントの ID を隠すことができますが、リバースプロキシはサーバの ID を隠すことができます。リバースプロキシにはいくつかの利用法がありますが、一部を紹介します。

  • ロードバランシング: 複数のウェブサーバーに負荷を分散すること
  • 静的なコンテンツのキャッシュ: 写真のような静的コンテンツをキャッシュすることによってウェブサーバーの負荷を軽減すること
  • 圧縮: コンテンツを圧縮して最適化し、読み込み時間を短縮すること

プロキシを介してクライアント情報を転送する

プロキシは、プロキシの IP アドレスから発信されたようにリクエストを表示させることができます。 これはクライアントの匿名性を提供するためにプロキシを使用する場合に便利ですが、それ以外の場合は元のリクエストの情報が失われます。 元のクライアントの IP アドレスは、デバッグ、統計、またはロケーション依存のコンテンツの生成によく使用されます。 この情報を公開する一般的な方法は、次の HTTP ヘッダーを使用することです。

標準化されたヘッダー:

Forwarded

プロキシがリクエストのパスに含まれているときに、変更または失われたクライアント側のプロキシサーバー側からの情報が含まれます。

あるいは事実上の標準バージョン:

X-Forwarded-For Non-standard

HTTP プロキシまたはロードバランサーを介してウェブサーバーに接続しているクライアントの発信元 IP アドレスを識別します。

X-Forwarded-Host Non-standard

クライアントがプロキシまたはロードバランサーへの接続に使用した元のホストを識別します。

X-Forwarded-Proto Non-standard

クライアントがプロキシまたはロードバランサーへの接続に使用したプロトコル (HTTP または HTTPS) を識別します。

(クライアントへの接続ではなく) プロキシ自体に関する情報を提供するには、Via ヘッダーを使用できます。

Via

プロキシによって、フォワードとリバースの両方のプロキシが追加され、リクエストヘッダーとレスポンスヘッダーに表示されます。

HTTP トンネリング

トンネリングはデータをカプセル化することによって、パブリックネットワークを介してプライベートネットワークデータおよびプロトコル情報を送信します。 HTTP トンネリングは、より低いレベルのプロトコル (TCP) を伝送するために、より高いレベル (HTTP) のプロトコルを使用しています。

HTTP プロトコルは CONNECT と呼ばれるリクエストメソッドを指定します。リクエストされたリソースとの双方向通信を開始し、トンネルを開くために使用することができます。これは、HTTP プロキシの背後にあるクライアントが SSL (つまり HTTPS、443 番ポート) を使用してウェブサイトにアクセスする方法です。ただし、すべてのプロキシサーバーが CONNECT メソッドに対応していたり、443 番ポートのみに限定したりしているわけではないことに注意してください。

Wikipedia の HTTP トンネルの記事も参照してください。

プロキシの自動設定 (PAC)

プロキシ自動設定 (PAC) ファイルは、ウェブブラウザーのリクエスト (HTTP、HTTPS、および FTP) を直接宛先に送信するか、ウェブプロキシサーバーに転送するかを決定する JavaScript 関数です。PAC ファイルに含まれる JavaScript 関数は、次の関数を定義します。

auto-config ファイルは拡張子が .pac のファイルに保存する必要があります。

proxy.pac

MIME タイプは次のように設定されています。

application/x-ns-proxy-autoconfig

このファイルは FindProxyForURL という関数で構成されています。以下の例は、内部 DNS サーバーが内部ホスト名のみを解決できるように設定されている環境で動作し、解決できないホストに対してのみプロキシを使用することを目標としています。

js
function FindProxyForURL(url, host) {
  if (isResolvable(host)) return "DIRECT";
  else return "PROXY proxy.mydomain.com:8080";
}

他の例についてはプロキシ自動設定 (PAC) を参照してください。

関連情報