Nginxがよく担う「リバースプロキシ」— 何をしている?
解説
正解は「サーバーの前に立ってリクエストを振り分ける」です。リバースプロキシはクライアントとサーバーの間に立ち、クライアントからのリクエストを受け取って背後のサーバーに転送します。クライアントからはリバースプロキシが本物のサーバーに見えるため、背後に何台サーバーがあるか、どんな構成かはクライアントに見えません。選択肢Aの「クライアントの代わりにリクエストを送る」は通常のプロキシ(フォワードプロキシ)の説明です。プロキシとリバースプロキシの違いどちらも「代理」という意味ですが、誰の代理をするかが逆です。プロキシ(フォワードプロキシ):クライアント側の代理。社内ネットワークからインターネットにアクセスする際に間に入る。クライアントの身元を隠す方向に働くリバースプロキシ:サーバー側の代理。インターネットから来たリクエストを受けて背後のサーバーに転送する。サーバーの構成を隠す方向に働く「誰を守っているか」で考えると混乱しにくくなります。プロキシはクライアントを守り、リバースプロキシはサーバーを守ります。リバースプロキシが担う具体的な仕事Nginxのようなリバースプロキシは単にリクエストを転送するだけでなく、複数の役割を同時にこなします。ロードバランシング:複数のアプリサーバーにリクエストを分散させ、1台に負荷が集中するのを防ぐSSL終端:HTTPS通信の暗号化・復号をリバースプロキシ側で処理し、背後のアプリサーバーはHTTPで通信できるようにするキャッシュ:静的ファイルやAPIレスポンスをキャッシュし、アプリサーバーへの問い合わせを減らすセキュリティ:アプリサーバーのIPアドレスやポート番号を外部から隠す。不正なリクエストをフィルタリングするなぜNginxがよく使われるのかNginxはイベント駆動型アーキテクチャを採用しており、少ないメモリで大量の同時接続を処理できます。Node.jsのアプリサーバーは動的な処理には強いものの、静的ファイルの配信や大量の同時接続の捌きはNginxに任せた方が効率的です。そのため、本番環境では「Nginx(リバースプロキシ)→ Node.js(アプリサーバー)」という構成が定番になっています。開発中は意識しないが本番では必須ローカル開発では localhost:3000 に直接アクセスするため、リバースプロキシの存在を意識しません。しかし本番環境では、Nginxやクラウドのロードバランサー(AWSのALBなど)がリバースプロキシとして前段に立つのがほぼ標準です。デプロイ時に「なぜNginxを挟むのか」が分かっていると、インフラ構成の理解がぐっと楽になります。