LoginSignup
28
19

More than 1 year has passed since last update.

Forward Proxy と Reverse Proxy って結局何が違うのか?

Last updated at Posted at 2019-08-15

概要

LAN から WAN に抜ける時に Client の代わりになってくれるものを Forward Proxy
WAN から LAN への通信で必要になるのが Reverse Proxy くらいにしか理解していませんでした... 。
調べ直したところ、間違ってはいないかったですが、Forward も Reverse も結局、

  • Client からリクエストを受け取って Server に渡す
  • Server からのレスポンスを受け取って Client に返す

という通信の流れは同じであるため、これだけだと明確な違いを理解できていません。
この記事に Reverse Proxy と Forward Proxy の違いの詳細をまとめておきます。

結論

いきなり結論ですが、Forward と Reverse の決定的な違いは、通信対象の Server が特定のものであるか、不特定多数であるかです。

Forward Proxy

普通に「プロキシ」と言ったら、こちらを指します。
LAN から WAN への抜ける時に、Client (Web brawser) の代わりに通信を行ってくれる。
リクエストを受ける Web Server は、Proxy を経由しているため Proxy からリクエストが来ているように見え、Client の IP アドレスを隠蔽できます。
また、Web Server への通信は必ず Proxy を経由するようにすることで、Proxy でユーザー認証、URL フィルタリング、通信の管理なども行えるようになります。

つまり、Forward Proxy とは Client から不特定の Server にアクセスする際に、Client の代わりに通信を行ってくれるものです。

Web browser (Client) → ForWard Proxy (Client) → 不特定多数の Web server (Server)

Reverse Proxy

「リバプロ」と呼ばれることが多いです。(自分の周りでは)
不特定多数の Client から、特定の Server への通信を代わりに行ってくれるのが Reverse Proxy になります。
Reverse Proxy を導入することで、Server への負荷分散、Server の IP アドレスを隠すことができるなどのメリットがあります。

不特定多数の Web browser (Client) → ForWard Proxy (Server) → Web server (Server)

まとめ

いろんな記事に Forward Proxy は Client 側に置かれて、Reverse Proxy は Server 側に置かれるものだ。と書かれていましたが、その本質は

  • Forward Proxy は特定の Client から、不特定多数の Server への通信を代わりに行うもの
  • Reverse Proxy は不特定多数の Client から、特定の Server への通信を代わりに行うもの

という違いがあるからでした。

おまけの備忘録

  • Apache と Nginx どちらを Reverse Proxy にするべきか

Apache でも Reverse Proxy の機能はありますが、Apache よりも軽量で動作が軽く、単純なリクエストを大量に捌くのが得意なのは Nginx。そのため Nginx を採用する事例が多いようです。
複雑なアプリケーション処理は Apache で行い、Nginx による Reverse Proxy が Apache にリクエストを転送するという構成が採用されることもあるようです。

  • Nginx の Reverse Proxy 設定

/etc/nginx/conf.d に設定ファイルを配置します。ファイル名は xxx.conf となります。

『www.example.co.jp』へのリクエスト全てを 192.168.1.1 へ転送する場合は以下のようなファイル構成になります。

server {
  listen 80;
  server_name www.example.co.jp;

  proxy_set_header    Host    $host;
  proxy_set_header    X-Real-IP    $remote_addr;
  proxy_set_header    X-Forwarded-Host       $host;
  proxy_set_header    X-Forwarded-Server    $host;
  proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

  location / {
    proxy_pass http://192.168.1.1/
  }
}
28
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
19