著者:田中麻維
大手電機メーカー系のSierに入社後、インフラエンジニアとしてLinuxサーバーの構築や保守・運用、ソフトウェアの開発業務を経験。アイティベル入社後は、IT領域の執筆などを行う。
リバースプロキシとは、Webサーバーの負荷分散やセキュリティの向上を目的として設置する仕組み、あるいはその機能を実装したサーバーを指します。
リバースプロキシは一般的なプロキシ(フォワードプロキシ)とは逆方向に働き、異なるメリットがあるため、どちらのプロキシも企業のシステムを効率的かつ安全に運用するために重要です。しかし、リバースプロキシの役割を明確に理解できていないならば、適切な導入は難しいでしょう。
本記事ではリバースプロキシの仕組みやメリット、フォワードプロキシとの違い、具体的な設定方法まで詳しく解説します。
1. リバースプロキシとは
リバースプロキシとは、クライアントからのリクエストを受け、内部のWebサーバーにリクエストを中継する仕組みです。後述する通常のプロキシ(フォワードプロキシ)と逆方向(リバース)に働くので、リバースプロキシと呼ばれます。
リバースプロキシサーバーは、リバースプロキシ機能を実装するためのサーバーです。
リバースプロキシの役割
通常ユーザーがWebブラウザーなどのクライアントからインターネットを経由してWebサイトにアクセスしようとすると、リクエストが直接Webサーバーに送られます。リクエストを受け取ったWebサーバーが応答すると、クライアントはWebページにアクセスできます。
この場合、Webサーバーが直接インターネットに接続されるため、外部からの攻撃や不正アクセスを受けるリスクが高まります。またすべてのリクエストがWebサーバーに届くため、負荷が集中するなどの問題も発生します。
リバースプロキシは、インターネットとWebサーバーの間に設置され、Webサーバーの代理として機能します。クライアントからのリクエストが直接Webサーバーに送られるのではなく、リバースプロキシに送られます。これにより、Webサーバーの身元を隠し、負荷分散ができるため、負荷が集中する問題を解決できます。
リバースプロキシの仕組み
リバースプロキシを設置した場合、クライアントがWebサイトを表示する流れは次のとおりです。
- クライアントから特定のWebサイトにアクセスするためのリクエストが送信される。
- リバースプロキシがリクエストを受け、コンテンツを保有する内部のWebサーバーへリクエストを中継する。この際に負荷状況や応答速度などに応じて、複数のWebサーバー間でリクエストを振り分ける。
- リクエストを受けたWebサーバーがリバースプロキシに応答する。
- リバースプロキシがその応答をクライアントへ中継する。
フォワードプロキシとは
フォワードプロキシとは、リバースプロキシとは逆の流れで働くプロキシです。内部のクライアントからのリクエストを受け取り、リクエストをインターネット上の外部サーバーに中継する仕組みを指します。
またフォワードプロキシはクライアント(内部ネットワーク)とインターネットの間に設置され、クライアントの代理として機能します。クライアントの身元を保護したり、外部からの攻撃や不正アクセスを防いだりする効果があります。
フォワードプロキシについて詳しくは、以下の記事をご覧ください。
リバースプロキシとフォワードプロキシの違い
リバースプロキシとフォワードプロキシは逆方向に働きます。具体的な違いは次のような点です。
リバースプロキシ | フォワードプロキシ | |
設置場所 | インターネットと内部のWebサーバーの間 | 内部ネットワークとインターネットの間 |
制御する通信 | 外部から内部への通信 | 内部から外部への通信 |
保護対象 | 内部のWebサーバー | 内部ネットワークのクライアント |
目的 | 負荷分散、セキュリティ向上 | ユーザーの利便性向上、セキュリティ向上 |
2. リバースプロキシの機能
リバースプロキシの具体的な機能は、次のようなものがあります。
IPアドレス隠ぺい機能
クライアントからのリクエストを受け取ってサーバーに転送する際、サーバーのIPアドレスを隠ぺいします。これにより、外部から直接サーバーにアクセスできなくなり、攻撃者から標的にされるリスクを回避できます。
負荷分散機能
同じ処理を行う複数のサーバーを用意しておけば、リバースプロキシはアクセスが集中した際に各サーバーへアクセスを振り分けられます。これにより、負荷が分散され、システム全体のパフォーマンスを向上させます。
キャッシュ機能
取得したWebコンテンツをリバースプロキシが一時的に保存して、クライアントから同じリクエストが送信された際に保存したデータをクライアントに返します。これにより、ユーザーへの応答時間を短縮できるほか、Webサーバーの負荷を軽減できます。
WAF(Web Application Firewall)機能
リバースプロキシにはWAF(Web Application Firewall)機能をもつものもあります。WAFは、Webアプリケーションに対する攻撃を防ぐセキュリティ機能です。
リクエスト内容を分析し、SQLインジェクションやクロスサイトスクリプティング(XSS)などの攻撃をブロックします。SQLインジェクションは悪意のあるSQLコードをデータベースに挿入してデータを操作する攻撃手法で、クロスサイトスクリプティングはWebページに悪意のあるスクリプトを埋め込んでユーザーの情報を盗む攻撃です。
WAFについて詳しくは以下の記事をご覧ください。
3. リバースプロキシのメリット
リバースプロキシを導入すると、次のようなメリットが得られます。
セキュリティを強化できる
外部に公開されているWebサーバーは、サイバー攻撃の標的とされる場合が多くあります。しかし、Webサーバーの代理となるリバースプロキシを設置すると、直接的なアクセスを防げるためシステム全体のセキュリティレベルを向上させられます。
リバースプロキシの設置はサイト内容の改ざん防止などにつながるため、特に公共性の高いサイトを運営する場合などに情報の信頼性を確保できます。
パフォーマンスが向上する
キャッシュ機能により、大量のデータが必要なページを表示する場合でも、2回目以降であれば高速に処理できます。ユーザビリティが向上するほか、Googleなど検索エンジンからの評価改善も期待できます。
動画コンテンツやニュースコンテンツなど、大容量のデータを提供しているサイトでは特にリバースプロキシの活用が効果的です。リモートワークの普及にともなって増加したオンライン会議の遅延解消などにも役立っています。
安定したサービス提供を実現できる
負荷分散機能により、複数のサーバー間でトラフィックを効率的に分散できるため、特定のサーバーに過剰な負荷がかからないようにできます。これにより、アクセス増加でサーバーの機能が停止するなどのトラブルを防ぎ、安定したサービス提供を実現できます。
また特定のサーバーのメンテナンスで機能を停止する必要がある場合でも、ほかのサーバーが稼働するためユーザーへの影響を防げます。
4. リバースプロキシのデメリット
リバースプロキシにはメリットが多いものの、次のようなデメリットもあるため、注意しなければなりません。
サイバー攻撃の対象となる可能性がある
リバースプロキシはWebサーバーを保護しますが、リバースプロキシ自体がサイバー攻撃の対象となる可能性があります。
リバースプロキシはインターネットと社内ネットワークの間に緩衝地帯として設けられるDMZ(Demilitarized Zone)に設置される場合が一般的です。外部から直接アクセス可能なため、サイバー攻撃の標的とされる可能性があります。
リバースプロキシが乗っ取られれば、その先のWebサーバーも危険にさらされるため、リバースプロキシには堅牢なセキュリティ対策が必要です。
DMZについて詳しくは、以下の記事をご覧ください。
設定・管理が複雑になる
リバースプロキシを導入する場合、通常よりもサーバーの設定や管理が複雑になる可能性があります。特に複数のWebサーバーと連携する場合、それぞれのサーバーの設定を統一する必要があるため、管理の手間が増加するでしょう。
リバースプロキシ導入にあたって、運用体制を強化する、自動化ツールを活用するといった工夫が必要です。
適切な設定・運用が必要
リバースプロキシの適切な設定や運用が行われない場合、逆にセキュリティリスクが高まったり、パフォーマンスが低下したりするおそれがあります。十分な検討と注意が必要です。運用していくなかで状況に応じてチューニングしたり、セキュリティ対策を見直したりする必要もあります。
5. リバースプロキシの設定方法
リバースプロキシとしてよく利用されるWebサーバーの「Nginx」と「Apache」での設定方法を紹介します。
Nginxの場合
Nginxは、軽量で高パフォーマンスなオープンソースのWebサーバーです。リバースプロキシとしても広く利用されています。Ubuntuを利用している場合、次の手順で設定します。
- Nginxをインストールする
[コマンド]
sudo apt-get update
sudo apt-get install nginx
- 設定ファイルにリバースプロキシ設定を追加する
[コマンド]
sudo vi /etc/nginx/sites-available/default
[設定ファイル]
server {
listen 80;
server_name <サーバーのドメイン名>;
location / {
proxy_pass <転送先のサーバーアドレス>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- location:リクエストの処理方法を定義する。
- proxy_set_header:転送先にアクセス元のIPアドレスやホスト情報を定義・追加する。
- 再起動する
[コマンド]
sudo systemctl restart nginx
Apacheの場合
Apacheは互換性が高く、さまざまなプラットフォームで動作するオープンソースのWebサーバーです。Ubuntuを利用している場合、次の手順で設定します。
- Apacheをインストールする
[コマンド]
sudo apt-get update
sudo apt-get install apache2
- リバースプロキシモジュールを有効にする
[コマンド]
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
- 設定ファイルにリバースプロキシ設定を追加する
[コマンド]
sudo vi /etc/apache2/sites-available/00-proxy.conf
[設定ファイル]
<VirtualHost *:80>
ServerName <サーバーのドメイン名>
ProxyRequests Off
ProxyPass / <転送先のサーバーアドレス>/
ProxyPassReverse / <転送先のサーバーアドレス>/
</VirtualHost>
- ProxyPassReverse:サーバーからの応答をクライアントに戻す際にヘッダーを修正する
- 再起動する
sudo systemctl restart apache2
6. リバースプロキシを運用する際のポイント
リバースプロキシを効果的に運用するために、次のようなポイントに配慮しましょう。
冗長化する
障害が発生した場合に備えて、複数のリバースプロキシサーバーを配置するなど、冗長化をおすすめします。冗長化すれば、一台が停止しても、ほかのサーバーが稼働するため、障害の影響を抑えられます。
また、障害が発生した際の対応手順を事前に設定しておくと、緊急時でもスムーズに復旧できます。
ログを管理する
リバースプロキシのアクセスログを取得してトラフィックを分析すると、攻撃の予兆に気づけたり、トラブルの原因を解明できたりとさまざまなメリットがあります。
ログの保存場所や保存期間を適切に設定し、必要に応じてログローテーション(一定の期間や容量ごとに古いログを削除または上書きすること)を実施するとよいでしょう。
まとめ
リバースプロキシは、クライアントからのリクエストをWebサーバーに中継すると、負荷分散やセキュリティの強化を実現する仕組みです。フォワードプロキシとの違いや役割をきちんと理解したうえで適切に運用すれば、自社システムの安定的な運用につなげられるでしょう。ぜひリバースプロキシの導入を検討されてみてはいかがでしょうか。