プロキシへの紹介
はじめに
プロキシ、またはプロキシサーバーとも呼ばれるものは、インターネット上のクライアントとサーバーの間に立ち、中継役を務めるサーバーソフトウェアです。プロキシがない場合、クライアントはリソースの要求を直接サーバーに送り、サーバーはリソースを直接クライアントに提供します。このアプローチは理解しやすく実装も簡単ですが、プロキシを追加することでパフォーマンス、プライバシー、セキュリティなどの利点を得ることができます。プロキシはクライアントとサーバーの間にあるインターネットのゲートキーパーとしての役割も果たします。
一般的に言えば、サーバーハードウェアとプロキシソフトウェアがインストールされた組み合わせは、プロキシサーバーとしてもよく言及されています。ただし、この記事ではソフトウェアとして伝統的に定義されるプロキシと、ウェブサーバーの文脈におけるプロキシに焦点を当てます。主に2つのタイプ、フォワードプロキシとリバースプロキシについて説明します。それぞれのタイプは異なるユースケースを持ち、類似した命名規則のために混同されることがしばしばあります。
この記事は、プロキシとそのサブタイプについての理解を提供し、一般的なセットアップでの役立ち方を紹介します。この記事を読むことで、プロキシが有益な状況を特定し、特定の状況での適切な解決策(フォワードプロキシまたはリバースプロキシ)を選択することができるようになります。
フォワードプロキシの理解
フォワードプロキシ(オープンプロキシとも呼ばれる)は、インターネットを介してオリジンサーバーにリクエストを送信しようとするクライアントの代理として機能します。このシナリオでは、クライアントがリクエストを送信しようとするすべての試みは、代わりにフォワードプロキシに送信されます。クライアントの代わりにフォワードプロキシはリクエストを調査します。まず、このクライアントがこの特定のフォワードプロキシを介してリクエストを送信することが許可されているかどうかを判断します。次に、リクエストを拒否するか、オリジンサーバーに転送します。クライアントはインターネットに直接アクセスすることはできず、フォワードプロキシが許可しているものにアクセスすることしかできません。
インターネット上でプライバシーや匿名性を高めるために、フォワードプロキシはよく利用されます。フォワードプロキシはクライアントの代わりにインターネットにアクセスし、その過程でクライアントの元のIPアドレスとは異なるIPアドレスを使用することができます。
設定によって異なりますが、フォワードプロキシはさまざまな機能を提供することができ、以下のようなことができます。
- Avoid ad tracking.
- Circumvent surveillance.
- Identify restrictions based on your geolocation.
フォワードプロキシは職場などのセキュリティとアクセス許可に基づくシステムでも使用されています。インターネットのすべての通信が共通のフォワードプロキシレイヤーを通過するようにすると、管理者は特定のクライアントのみが共通のファイアウォールを介してインターネットにアクセスできるように許可することができます。多くの異なる環境やユーザーを持つ多数のクライアント層のファイアウォールを維持する代わりに、ファイアウォールはフォワードプロキシレイヤーに配置することができます。
フォワードプロキシを使用するためには、手動で設定する必要があることを忘れないでください。一方、リバースプロキシはクライアントに気づかれずに利用できます。フォワードプロキシによってクライアントのIPアドレスがオリジンサーバーに渡されるかどうかによって、プライバシーと匿名性が保護されるか透明にされるかが決まります。
フォワードプロキシには、考慮すべきいくつかのオプションがあります。
- Apache: A popular open-source web server that offers forward proxy functionality.
- Nginx: Another popular open-source web server with forward proxy functionality.
- Squid: An open-source forward proxy that uses the HTTP protocol. This option doesn’t include an entire web server solution. You can check out our guide on how to set up Squid proxy for private connections on Ubuntu 20.04.
- Dante: A forward proxy that uses the SOCKS protocol instead of HTTP, making it more suitable for use cases such as with peer-to-peer traffic. You may also want to check out how to set up Dante proxy for private connections on Ubuntu 20.04
逆プロキシの理解
逆プロキシは、ウェブサーバーの代理として機能し、クライアントからの受信リクエストを代表して処理します。このウェブサーバーは、単一のサーバーまたは複数のサーバーであることがあります。さらに、Gunicornなどのアプリケーションサーバーである場合もあります。いずれのシナリオでも、クライアントからのリクエストはインターネットを介して送信されます。通常、このリクエストは、クライアントが要求するリソースを持つウェブサーバーに直接送られます。しかし、逆プロキシは中間者として機能し、ウェブサーバーを直接のインターネット接続から隔離します。
クライアントの視点から見ると、リバースプロキシとのやり取りはウェブサーバーと直接やり取りするのとまったく同じです。機能的に同じであり、クライアントはそれを区別することができません。クライアントはリソースを要求し、それを受け取りますが、クライアントに追加の設定は必要ありません。
反転プロキシは、次のような機能を提供します:
- Centralized security for the web server layer.
- Directing incoming traffic based on rules you can configure.
- Added functionality for caching.
正規および逆プロキシの両方において、中央集権的なセキュリティは利点とされますが、逆プロキシはウェブサーバーレイヤーに対して提供されますが、クライアントレイヤーには提供されません。複数の設定を持つ可能性があるウェブサーバーレイヤーにおいてファイアウォールを維持することに代わり、逆プロキシレイヤーにおいてファイアウォールセキュリティの大部分を重点的に扱うことができます。さらに、ウェブサーバーからファイアウォールやクライアントリクエストとのインターフェースの責任を取り除くことで、ウェブサーバーはリソースの提供に専念することができます。
複数のサーバーが逆プロキシの背後に存在する場合、逆プロキシはどのリクエストがどのサーバーに送られるかも制御します。複数のウェブサーバーが同じリソースを提供することがありますが、それぞれが異なる種類のリソースを提供することも、その両方の組み合わせで提供することもあります。これらのサーバーは、HTTPプロトコルを通常のウェブサーバーとして使用するだけでなく、FastCGIなどのアプリケーションサーバープロトコルも含めることができます。逆プロキシを設定して、クライアントを特定のサーバーに送るか、トラフィックの負荷に関する特定のルールに従って動作するようにすることができます。
リバースプロキシは、配置先のウェブサーバーの前に置かれることでキャッシュ機能を活用することもできます。大きな静的アセットでは、キャッシュルールを設定してウェブサーバーにアクセスするたびに読み込むのを避けることができます。また、いくつかの解決策では、ウェブサーバーに一切触れずに静的アセットを直接提供するオプションもあります。さらに、リバースプロキシはこれらのアセットの圧縮も処理することができます。
人気のあるNginxウェブサーバーは、同時に人気のあるリバースプロキシソリューションでもあります。Apacheウェブサーバーもリバースプロキシ機能を持っていますが、それはApacheにとっては追加機能であり、一方、Nginxはもともとリバースプロキシ機能に特化して作られています。
正向きプロキシと逆向きプロキシの使用例の違いを区別する。
「フォワード」と「リバース」は、方向性や「受信」と「送信」トラフィックとの比較による誤解が生じるため、これらのラベルは混乱を招く場合があります。なぜなら、両方のプロキシはリクエストとレスポンスの取り扱いを行うからです。その代わりに、フォワードプロキシとリバースプロキシを区別するためには、構築中のアプリケーションのニーズを考慮する方が良い方法です。
インターネット上でウェブアプリケーションを提供するためのソリューションを構築する際、リバースプロキシは非常に有用です。リバースプロキシは、ウェブサーバーをインターネットとのすべてのやり取りに代表しています。
フォワードプロキシは、個人利用や職場環境でクライアントのトラフィックの前に配置すると便利です。彼らは、インターネットとの相互作用においてあなたのクライアントトラフィックを代表します。
類似の命名規則にばかり注意を向けるのではなく、用途によって区別することで混乱を避けることができます。
結論
この記事では、プロキシの定義と、フォワードプロキシとリバースプロキシの2つの主要なタイプについて説明しました。実際の使用例と有益な機能の調査を通じて、フォワードプロキシとリバースプロキシを区別しました。もしプロキシの実装について探究したい場合は、当社のガイド「Ubuntu 20.04サーバーでApacheのリバースプロキシとしてNginxを設定する方法」をご覧ください。