NGINX Plusを使用したリバースプロキシ
本内容は「Reverse Proxy Using NGINX Plus」ブログを翻訳したものです。
NGINX は非常に高性能な Web サーバとして名声を得ています。NGINX がリバースプロキシとしても使用できることは多くの方が知っていると思いますが、どれほど強力なリバースプロキシであるかは知られていないかもしれません。
<目次>
目次[非表示]
- 1.リバースプロキシとは
- 2.リバースプロキシを使用する利点とは?
- 3.NGINX Plusをリバースプロキシとして使用する
- 3.1.負荷分散(ロードバランシング)
- 3.2.ヘルスチェック
- 3.3.リクエスト ルーティング
- 3.4.リクエストとレスポンスの書き換え
- 3.5.キャッシング
- 3.6.コンテンツ圧縮
- 3.7.SSL/TLS 処理
- 3.8.ライブ アクティビティのモニタリングとロギング
- 3.9.その他
リバースプロキシとは
まず、プロキシサーバとは何なのか、立ち戻って考えてみようと思います。Wikipediaに良い定義がありましたので引用します。
“[A] proxy server is a server (a computer system or an application) that acts as an intermediary for requests from clients seeking resources from other servers.”
"プロキシサーバとは、他のサーバからのリソースを求めるクライアントからのリクエストに対して仲介役を務めるサーバ(コンピュータシステムまたはアプリケーション)のことである。"
つまり、プロキシサーバは、クライアントと、クライアントが探しているデータがある実際のサーバとの間に位置するものになります。クライアントにはプロキシサーバが実際のバックエンドサーバに見え、 バックエンドサーバにはプロキシサーバがクライアントに見えることになります。
リバースプロキシサーバの定義を確認するために、Wikipedia に戻ります。
“[A] reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers.”
"リバースプロキシとは、クライアントに代わって1つ以上のサーバからリソースを取得するプロキシサーバの一種である。"
違いは、プロキシ サーバがクライアントと1台のバックエンドサーバの間に配置されるのに対し、リバースプロキシサーバは1台以上のバックエンドサーバの前に配置され、各リクエストに対してどのバックエンドサーバを使用するかを決定します。
リバースプロキシを使用する利点とは?
なぜリバースプロキシを利用するのでしょうか?それは以下のような利点が存在するからです。
-
Concurrency(同時接続性)
インターネットアプリケーションでは、多くの場合、複数のコネクションを張る多数のクライアントが接続してくるため、バックエンドサーバへのコネクション数が非常に多くなります。Web サーバとアプリケーションサーバの多くが、多数の接続を適切に処理できません (Web サーバとして使用される NGINX は例外です)。そのため、複数の接続をより適切に処理できるリバース プロキシを追加すると、バックエンドサーバのパフォーマンスが大幅に向上する可能性があります。
-
Resiliency(回復力)
クライアントがバックエンドサーバに直接接続している状態で障害が発生した場合、現在サーバに接続している (または接続しようとしている) すべてのクライアントは、リクエストが失敗したことを認識します。リバースプロキシサーバは、バックエンドサーバの状態を監視し、障害が発生したサーバがサービスを再開するまで、そのサーバへのリクエストの送信を停止できます。リバースプロキシは、まだ動作しているバックエンドサーバにリクエストを自動的に送信するため、クライアントにエラーは表示されません。
-
Scalability(スケーラビリティ)
リバースプロキシがバックエンドサーバグループの前に立っているため、その裏でトラフィック負荷の変化に応じたサーバの追加や削除が可能です。
-
Layer 7 routing(L7ルーティング)
リバースプロキシは、サーバに向かうすべてのトラフィックを確認し、各リクエストの送信先についてインテリジェントな決定を行い、必要に応じてリクエストとレスポンスを変更します。リクエスト内の特定の HTTP ヘッダー、URL の一部、クライアントの地理的な場所などに基づいてルーティングを決定できます。
-
Caching (コンテンツキャッシュ)
リバースプロキシは、キャッシングを行うのに最適です。通常、すべてのリクエストをバックエンドサーバに送信し、各バックエンドサーバに独自のキャッシュを構築させるよりも、リバースプロキシでコンテンツをキャッシュする方がはるかに効率的です。
-
その他の機能
リバースプロキシは、バックエンドサーバの前に位置することで、帯域幅またはリクエストレートに基づくトラフィックシェーピング、接続数の制限、さまざまな認証スキームとの統合、アクティビティの監視など、色々な機能を実行することができます。
NGINX Plusをリバースプロキシとして使用する
Web サーバとしてよく知られる NGINX OSS にさらに多くの機能を取り込んだ NGINX Plus は、専用のハードウェアアプライアンスに取って代わるアプリケーションデリバリーコントローラー (ADC) になります。
以下に、NGINX Plus で利用できる機能の一部をご紹介します。
負荷分散(ロードバランシング)
負荷分散のアルゴリズムは加重と非加重の両方から選択することができ、セッション持続(パーシステンス)もサポートされています。NGINX Plus は、HTTP、HTTPS、WebSocket、FastCGI、memcached、SCGI、HTTP/2、および uwsgi の負荷分散も行うことが可能です。
詳細は以下をご参照ください。
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
ヘルスチェック
バックエンドサーバの状態を監視するパッシブヘルスチェックとアクティブヘルスチェックの両方がサポートされています。NGINX Plusがノードと接続ができなかった時に初めてそのノードがダウンしているとマークするのがパッシブヘルスチェックです。バックエンドノードに対して定期的にヘルスチェックを実行しておくのがアクティブヘルスチェックです。(訳者注:前者は少数であってもクライアントからのリクエストの失敗につながるため、多くのサイトでは後者のアクティブヘルスチェックを採用しています。なお、オープンソース版のNGINXで利用できるのはパッシブヘルスチェックのみです。 )また、スロースタート機能を使用して、NGINX Plus がオンラインに戻ったばかりのノードへのトラフィックをゆっくりと増加させてトラフィックのバーストを避けることができます。
詳細は以下をご参照ください。
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/
リクエスト ルーティング
トラフィックをクライアント IP アドレス、ホスト名、URI、クエリ文字列、ヘッダーなど、リクエストの任意の部分に基づいてルーティングできます。
リクエストとレスポンスの書き換え
ヘッダー、ボディ、URI など、リクエストまたはレスポンスの任意の部分を変更できます。NGINX Plus はヘッダーの追加と削除もできます。
詳細は以下をご参照ください。
https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy#passing-request-headers
キャッシング
レスポンスをキャッシュすることができ、キャッシュするコンテンツの種類と期間を設定できます。キャッシュからパージ(削除)することもできます。
詳細は以下をご参照ください。
https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/
コンテンツ圧縮
gzip 圧縮がサポートされており、圧縮するコンテンツと圧縮を行うタイミングを細かく制御できます。
詳細は以下をご参照ください。
https://docs.nginx.com/nginx/admin-guide/web-server/compression/
SSL/TLS 処理
SSL/TLS の復号と暗号化がサポートされており、さまざまな証明書を使用して多くのドメイン名に対して復号を行うことができます。
ライブ アクティビティのモニタリングとロギング
JSON 形式でエンコードされた NGINX Plus の統計情報は、シンプルな HTTPリクエストで利用可能です。統計情報を表示するためのダッシュボードWeb ページが提供されるほか、それら情報をカスタムまたはサードパーティの監視ツールに提供することもできます。カスタムフォーマットのログは、ローカルと外部 syslog の両方に設定できます。
詳細は以下をご参照ください。
https://docs.nginx.com/nginx/admin-guide/monitoring/
その他
NGINX には、ビデオストリーミングのサポート、メール プロキシのサポート、GeoIP のサポート、ダウンタイムの無いリスタートとアップグレード、トラフィック シェーピング、接続数の制限など、さらに多くの機能があります。
より多くの情報が必要な場合は、以下のサイトを参照いただくか弊社までお気軽にお問い合わせください。
https://docs.nginx.com/nginx/
BIG-IPのリプレースについてはこちらから