概要
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/
}
}