😺

プロキシとリバースプロキシについて

2022/11/26に公開

前書き

開発環境を作るときにリバースプロキシを実装する必要があった為、仕組みを正しく理解するためにまとめてみました。

参考にした記事

https://note.com/shift_tech/n/n7d5113e5e471
https://www.engilaboo.com/nginx-docker-https/

本題

プロキシについて

  • 「プロキシ」とは日本語で「代理」という意味であり、内部ネットワークからインターネットに接続する際に中継の役割を担うサーバーのことで、「プロキシサーバー」とも呼ばれる。

プロキシの手順

  1. 社内LAN内のコンピューターが、プロキシサーバーにリクエストを送る
  2. プロキシサーバーが、外部Webサーバーにリクエストを転送する
  3. 外部Webサーバーから返されるコンテンツがプロキシサーバーに送られる
  4. 社内LAN内のコンピューターが、プロキシサーバーからコンテンツを受け取る

プロキシを利用するメリット

  • キャッシュ

プロキシは一度接続した内容を保存し、再度コンテンツが呼び出された際に、表示を高速化できる。社内LANからプロキシに接続している全てのコンピューター対象となるため、扱うデータの規模が大きくなるほどキャッシュを保存する効果が大きくなる。また、一定期間、同じリクエストを繰り返す必要がないことから、トラフィックの軽減にも寄与する。

  • ユーザー認証

プロキシサーバーにユーザー認証を実装すれば、認証されたユーザーのみインターネット通信が行えるようになる。社内のユーザーのみの利用制限や、不正なネットワークの利用の予防といった使い方が考えられる。

  • フィルタリング

社内のポリシーに基づいて、特定のサイトの閲覧を禁止するフィルタリングの設定が可能となる。ネットワークの業務外利用や情報漏えいのリスクを軽減できる。

  • ウイルス対策

ユーザーがサイトを閲覧した際に、受信するコンテンツのウイルスチェックが実施できる。悪意のあるサイトからマルウェアが侵入するのを防ぐ効果が期待できる。

  • 匿名性の確保

閲覧先のWebサイトには、社内のコンピューターではなく、プロキシサーバーが接続する。そのため、社内コンピューターのIPアドレスなどの情報が、接続先に公開されない。


リバースプロキシについて

  • リバースプロキシは、外部インターネットからサーバーへアクセスされる通信を中継する仕組みを指す。前述のプロキシ(フォワードプロキシ)と比較すると、インターネットへ接続する方向が逆(リバース)になるため、リバースプロキシと呼ばれる。

リバースプロキシの手順

  1. クライアントコンピューターからインターネット経由でリクエストを送信
  2. 送信先URLに割り当てられたリバースプロキシにリクエストを送信
  3. リバースプロキシがコンテンツを保有するWebサーバーへリクエストを転送
  4. Webサーバーは、リバースプロキシにコンテンツを返送
  5. リバースプロキシは、受け取ったコンテンツをクライアントコンピューターへ送信

### リバースプロキシを利用するメリット

  • リクエスト内容に応じたサーバーの選択

リバースプロキシに割り当てた、一つのURLの下で複数のサーバーを統合し、その内容に応じてリクエストを振り分けられる。例えば、「http://www.example.com/blog/」の場合はコンテンツ管理システムを運用するサーバー、「http://www.example.com/image/」の場合は静的Webページを格納するサーバーを自動的に選択できる。

  • 負荷分散

リバースプロキシの背後に同じ処理を行う複数のサーバーを用意しておけば、大量のアクセスが同時に集まった場合でも、各サーバーにアクセスを振り分けて負荷分散を実現できる。

  • キャッシュ

リバースプロキシを介して送信された静的コンテンツは、一定期間、キャッシュとしての保存が可能になる。異なるユーザーが同じ静的コンテンツを要求した場合、一時保存されたキャッシュが送信され、高速な表示が行える。また、キャッシュを利用する間はサーバーからリバースプロキシへの静的コンテンツのデータ送信が発生しないので、サーバーへの負荷が軽減される。

  • SSL高速化

ユーザーとWebサーバー間でやり取りする内容を暗号化するためにSSL通信が行われるが、通常はWebサーバー上で暗号化・復号の処理が求められる。リバースプロキシで暗号化・復号を行えば、内部のWebサーバーはSSL処理を行う必要がなくなり、負荷を軽減できる。この場合、ユーザーとリバースプロキシ間の通信は暗号化されるが、リバースプロキシとWebサーバー間の通信は暗号化されない。

Discussion