プロキシはどのように機能しますか?


12

たとえば、IP 100.100.100.100、ポート80に接続する場合、コンピューターはこのアドレスを指定したtcpパケットをワイヤーに送信します。

プロキシサーバーを使用する場合、たとえば、200.200.200.200ポート8080(Internet Explorerで設定できるプロキシの種類)このプロセスはどのように変更されますか?

それでも同じIPに接続したい場合、IPヘッダーには宛先IPまたはプロキシIP、あるいはその両方が含まれますか?

既にグーグルで調べたところ、プロキシを設定する方法を説明するページが何百もありますが、内部でどのように機能するかについては説明していません。

回答:


13

HTTP要求は、クライアントからProxy Serverのポート8080に送信されます。プロキシサーバーは、宛先サイトに新しいHTTP要求を発信します。プロキシは、構成に応じて、HTTP要求に「X-Forwarded-For」ヘッダーを追加することがよくあります。宛先WebサイトのログファイルにはプロキシのIPアドレスが表示されますが、「X-Forwarded-For」アドレスを記録するように構成されている場合とされていない場合があります。

これが一般的な構成ですが、プロキシソフトウェアを使用すると、あらゆる種類のカスタマイズが可能になります。

編集:私はあなたの質問を最初に読んだときに、squidやnginxなどのHTTPプロキシについて具体的に尋ねているという考えを得たことに注意する必要があります。さまざまな種類のプロキシが利用可能です。Internet Explorerでは、おそらくHTTPプロキシを使用しますが、他にも多くのタイプがあります。


ええ、それはプロキシサーバーとして使用しているソフトウェアとその構成方法に大きく依存します。たとえば、NginxのHttpProxyModuleを参照してください:wiki.nginx.org/HttpProxyModule
entropo

3
リクエストがプロキシサーバーのみに送信される場合、プロキシはどの宛先アドレスに接続するのかをどのように知るのですか?プロキシはHTTPレベルまたはTCPレベルで機能しますか?
コーディ

プロキシへのリクエストを行うブラウザは、完全なURIをリクエストします。次に、プロキシサーバーはDNSルックアップを実行し、ターゲットサイトへの独自のHTTP要求を発信します。
-emgee

1
Squidのようなhttpプロキシ(これは私の答えのベースとなっています)はアプリケーション層で動作します。
-emgee

1
@emgee:HTTPプロトコルにはCONNECTメソッドもあるため、HTTPプロキシを介してTCPサーバーに接続でき(プロキシで許可されている場合)、そのTCPサーバーはHTTPを話すサーバーである必要はありません。
vtest

2

HTTPはレイヤー7プロトコルなので、混乱しないでください。HTTPプロキシを使用してsay google.comと入力すると、HTTPヘッダーは同じgoogle.comのままですが、宛先IPアドレスはプロキシのIPアドレスになり、ソースはカスタマイズされたポート番号8080のホストIPになります。


1

HTTPプロキシを使用するには、クライアントから宛先サーバーではなくプロキシサーバーのIPアドレスに要求が送信されます。 次に、プロキシはHTTPヘッダー読み取っrequest-URIを抽出する必要があります。request-URIには宛先サーバーの名前またはIPが含まれ、プロキシサーバーはその情報を使用して要求を転送します。

HTTPの仕様では、(要求がそのサーバーに直接送信された場合、これらが不要になりますので)プロキシを使用しない場合は、要求ラインがサーバー名とポートを除外することができます。しかし、仕様に従って...

リクエストがプロキシに対して行われる場合、absoluteURI形式が必要です。

したがって、プロキシを使用しない場合、リクエスト行は次のようになります。

GET /robots.txt HTTP/1.1

ただし、プロキシを使用するには、行にサーバー名(および80でない場合はポート)を含める必要があります。

GET http://httpbin.org:80/robots.txt HTTP/1.1

プロキシサーバーは、事前に確立された要求ソケットを介して逐語的応答を単純に中継する場合があるため、操作がより簡単になる場合の応答側。


「HTTP The Definitive Guide」から、ページ。145:「HTTP / 1.1では、サーバーはプロキシとサーバーの両方のリクエストに対して完全なURIを処理する必要がありますが、実際には、展開されたサーバーの多くは部分的なURIのみを受け入れます。」
-nobar

これは標準的なアプローチでHostはありませんが、リクエスト行に絶対URIが提供されていない場合、プロキシはヘッダーを使用して部分URIを完成させることもできます。
-nobar

接続がエンドツーエンド暗号化(HTTPS)の場合、このアプローチは機能しません。 security.stackexchange.com/questions/101721/…–
nobar

-7

「tcpパケット」などはありません。TCPはデータストリームで動作します。IPパケットがあります。

ネットワークに関する基本的な知識が不足しているようです。TCP/ IPに関する優れた本を入手することをお勧めします。みんなのお気に入りは、W。リチャードスティーブンスによる「TCP / IPの図解」のようです。

質問に戻ります。

プロキシは仲介者です:

[あなた]-[プロキシ]-[接続するサーバー]

現在、2つの異なる接続があります。

[あなた]-(プロキシへの接続)-[プロキシ]-(プロキシへのサーバーへの接続)-[接続するサーバー]

プロキシを介してサーバーに接続していると思う場合、実際にはプロキシに接続し、特定のサーバーに到達したいことを伝えます。次に、プロキシは自身からそのサーバーへの2番目の接続を開き、双方向でデータを渡す仲介者として機能します。


13
TCPパケットは、TCPヘッダー情報を含むIPパケットです。これは一般的な用語です。そんなに無作法に失礼にならないでください。あなたも同時に間違っているので、それはあなたにひどく反映しているだけです。
フィルP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.