メインコンテンツへ移動

リバースプロキシ_システム設計ノート 6

無料2020-02-08#Back-End#reverse proxy#reverse proxy vs. forward proxy#反向代理与正向代理的区别#如何区分反向代理#转发代理

リバースプロキシはなぜ「リバース」プロキシと呼ばれるのか?

一。プロキシとは何か?

もちろん、ここでのプロキシは Web プロキシサービスを指し、クライアントのリソースリクエストとこれらのリソースを提供する Web サービスの間で仲介役を果たします:

In computer networking, a proxy server is a server application or appliance that acts as an intermediary for requests from clients seeking resources from servers that provide those resources.

プロキシサービスはクライアント側に実装することも、クライアントからターゲットサーバーまでの間の任意の場所に実装することもできます:

A proxy server may reside on the user's local computer, or at any point between the user's computer and destination servers on the Internet.

例えば、クライアントはターゲットリソースを提供する Web サービスに直接リクエストを送信するのではなく、ターゲットリソースの完全な URL を付けてプロキシサービスにリクエストします:

GET http://en.wikipedia.org/wiki/Proxy_server HTTP/1.1
Accept: text/html

プロキシサービスは受信後、(プロキシサービスが)指定されたリソースをリクエストし、レスポンス結果をクライアントに転送します:

HTTP/1.1 200 OK
Content-Type: text/html; charset UTF-8

二。リバースプロキシとは何か?

「リバース」は当然「フォワード」に対するものなので、まずフォワードプロキシとは何かを知る必要があります

フォワードプロキシ

フォワードプロキシは対外的で、外部リソース面向、ネットワークから様々なデータを取得するために使用されます:

A forward proxy is an Internet-facing proxy used to retrieve data from a wide range of sources (in most cases anywhere on the Internet).

クライアントに代わってリソースリクエストを送信し、レスポンス結果を対応するクライアントに返します。したがって、フォワードプロキシはクライアントに近く、クライアントとの関係がより密接 です(サーバーとの関係は一般的で、親しくありません)

リバースプロキシ

リバースプロキシはトラフィックを設定ルールに従って内部サーバーにリダイレクトする責任があり、外部リクエストはイントラネットの存在を知りません:

A reverse proxy taking requests from the Internet and forwarding them to servers in an internal network. Those making requests to the proxy may not be aware of the internal network.

リバースプロキシは対内的で、内部リソース面向、プライベートネットワーク上のサーバーへのアクセス制御と保護のフロントエンドとして使用されます:

A reverse proxy is usually an internal-facing proxy used as a front-end to control and protect access to a server on a private network.

したがって、リバースプロキシはサーバーに近く、サーバーとの関係は特別 で、限られた一部のリソースのみを提供します(フォワードプロキシのようにネットワークから様々なリソースを取得できるのとは異なります):

The reverse proxy sits closer to the web server and serves only a restricted set of websites.

また、このプロキシ関係はユーザーにとって必ず透過的です。ユーザーはソースサービスに接続しているのかプロキシサービスに接続しているのか分からないからです:

A reverse proxy (or surrogate) is a proxy server that appears to clients to be an ordinary server.

一方、ユーザーはフォワードプロキシに対して通常は認識しており、プロキシを介してネットワークリソースにアクセスしていることを明確に知っています

P.S.フォワード、リバースプロキシの他に、以下があります:

  • オープンプロキシ(Open proxy):一般公開(誰でもアクセス可能)されたフォワードプロキシ

  • アノニマスプロキシ(Anonymous proxy):クライアントの元の IP アドレスを公開しないプロキシサービス

  • トランスペアレントプロキシ(Transparent proxy):リクエストとレスポンスを透過し、一切変更しない。ゲートウェイ(Gateway)やルーターとして使用

三。「リバース」をどう理解するか?

リバースプロキシとフォワードプロキシの動作原理は完全に同じで、区別するのが難しいほどです:

実際、重要な違いは、フォワードプロキシは関連するクライアントとすべてのサーバーとの間の仲介者であり、リバースプロキシは関連するサーバーとすべてのクライアントとの間の仲介者 です:

Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client.

つまり、フォワードプロキシはクライアントを代表し、リバースプロキシはサーバーを代表 します:

A proxy acts on behalf of the client(s), while a reverse proxy acts on behalf of the server(s).

方向から見ると、フォワードプロキシはクライアントに代わってリソースをリクエストし、リバースプロキシはサーバーに代わってリソースを提供します:

[caption id="attachment_2115" align="alignnone" width="806"]why reverse proxy named as reverse why reverse proxy named as reverse[/caption]

四。リバースプロキシにはどのような役割があるか?

リバースプロキシは以下のシナリオでよく使用されます:

  • 暗号化/SSL 加速:SSL 暗号化の作業を SSL ハードウェアアクセラレーターを搭載したリバースプロキシに任せる

  • 負荷分散:トラフィック負荷を複数の Web サーバーに分散

  • 静的コンテンツのホスティング/キャッシュ:静的コンテンツ(画像など)をリバースプロキシに任せ、ソースサイトの負荷を軽減

  • 圧縮:プロキシサーバーはリソースコンテンツを圧縮最適化し、読み込み速度を向上

  • セキュリティ保護:ソースサーバーの存在とその特徴を隠蔽し、ファイアウォールと組み合わせて一般的な Web 攻撃を防衛

  • アクセス制御:コンテンツの監視/フィルタリング。職場、学校などでよく使用

SSL 加速

HTTP サービスの場合、リバースプロキシのレイヤーを介して SSL 暗号化を実装できます。詳細は [nginx HTTPS リバースプロキシ](/articles/nginx-https 反向代理/) を参照

負荷分散

リバースプロキシは負荷分散メカニズムの実装にも使用できます。下図の通り:

既定の転送ルール(つまり負荷分散戦略)に従ってクライアントリクエストを各サーバーに配信し、そのレスポンス結果を対応するクライアントに返します

P.S.負荷分散に関する詳細情報は、負荷分散_システム設計ノート 5 を参照

参考資料

コメント

コメントはまだありません

コメントを書く