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

We’d love to hear your thoughts on the next set of proposals for the JavaScript language. You can find a description of the proposals here.
Please take two minutes to fill out our short survey.

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

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

フォワードプロキシー

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

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

リバースプロキシー

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

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

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

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

標準化されたヘッダー:

Forwarded

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

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

X-Forwarded-For 非標準

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

X-Forwarded-Host 非標準

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

X-Forwarded-Proto 非標準

クライアントがプロキシーまたはロードバランサーへの接続に使用したプロトコル (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) を参照してください。

関連情報