リバースプロキシ(Reverse Proxy) とは、クライアント(ブラウザなど)からのリクエストをいったん受け取り、代わりにバックエンドのサーバー(Web アプリや API サーバー)へ転送し、そのレスポンスを再びクライアントに返す「仲介役」の仕組み。
なぜ使うの?(主なメリット)
-
複数サーバーへの振り分け・負荷分散
-
受け口を1つにまとめておき、裏で複数のアプリサーバー(Gunicorn ワーカーや複数ノード)に振り分けられる。
-
トラフィックが増えてもバックエンドを水平に増設しやすい。
-
-
SSL/TLS 終端(HTTPS 化)の集中管理
-
バックエンドが HTTP ポート(例:5000番)で動いていても、リバースプロキシが HTTPS(443番)で受けて暗号化を解除→バックエンドに平文で渡せる。
-
各バックエンドに証明書を入れる必要がなく、証明書管理が楽になる。
-
-
キャッシュ機能
-
画像や静的ファイル、APIレスポンスなどをリバースプロキシ側でキャッシュして高速配信。
-
バックエンドの負荷を下げられる。
-
-
ファイアウォール/認証の集中
-
外部にさらすのはリバースプロキシだけにし、裏のサーバーは内部ネットワークや UNIX ソケットで隠蔽できる。
-
IP 制限や WAF(Web Application Firewall)などをまとめてかけやすい。
-
-
URL 書き換え・ヘッダ操作
-
パスやヘッダを書き換えて、バックエンドの構造を隠しつつ柔軟にルーティング可能。
-
リバースプロキシ vs フォワードプロキシ
種類 | 役割・向き | 例 |
---|---|---|
フォワード | クライアント側 | 社内ネットワークの端末が外に出るとき使う代理サーバー(アクセス制御) |
リバース | サーバー側 | 外部から来たアクセスを裏の複数サーバーに振り分ける Nginx/Apache |
Nginx をリバースプロキシとして使うイメージ
Nginx がポート 80/443 で受け、内部の UNIX ソケット(または 127.0.0.1:8000
など)を通じて Gunicorn → Flask に繋ぎます。
まとめ
-
リバースプロキシ は“サーバー側の代理人”として動き、外部→内部の橋渡しをする。
-
SSL 終端、負荷分散、キャッシュ、セキュリティ強化など、多彩な機能を一手に引き受けられる。
-
本番環境ではほぼ必須の構成であり、Nginx や Apache、HAProxy などがよく使われます。