Nginx HTTP リクエスト フィルタリングとリバース プロキシ パフォーマンス分析
Nginx は、業界で広く使用されている HTTP サーバーおよびリバース プロキシ サーバーであり、そのシンプルな設計、優れたパフォーマンス、その他の利点により、大規模なサーバーとなっています。 Web アプリケーションの数、クラウド システムおよびモバイル アプリケーションの優先サーバー。実際のアプリケーションでは、Nginx は HTTP リクエストの処理と応答を担当するだけでなく、HTTP リクエストのフィルタリングやリバース プロキシも実行します。この記事では、Nginx の HTTP リクエスト フィルタリングとリバース プロキシの実装を分析し、パフォーマンス テストと分析を実行します。
Nginx は、正規表現に基づいた HTTP リクエスト フィルタリング モジュールを提供します。これは、修飾された HTTP リクエストをインターセプトして、悪意のあるリクエストのフィルタリングや保護を防ぐことができます。指定されたリソースの。次のコードを Nginx 構成ファイルに追加して、HTTP リクエスト フィルタリングを有効にします。
http { server { location / { if ($http_user_agent ~* Firefox) { return 403; } ... } } }
上記のコードでは、$http_user_agent は Nginx の組み込み変数であり、HTTP リクエスト ヘッダーの User-Agent フィールドを表します。 、~* は正規表現を表し、Firefox の文字列が一致した場合は 403 エラーが返されます。このようにして、1 つ以上のタイプのリクエストをフィルタリングできます。
Nginx の HTTP リクエスト フィルタリング モジュールは、HTTP リクエストの複雑なフィルタリングを実装するために使用できる $http_referer、$request_method、$remote_addr などの他のタイプの変数や命令も提供します。ドキュメントの理解が深まります。
Nginx のリバース プロキシ機能は、クライアント リクエスト プロキシをバックエンド アプリケーション サーバーに転送し、さらにバックエンド アプリケーション サーバーに転送できます。 Nginx は負荷分散を実現し、パフォーマンスを向上させるために結果をクライアントに返します。
次は、単純なリバース プロキシ構成です:
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
上記の構成では、myapp という名前のアップストリームを定義し、それぞれ 8080 とポート 8081 をリッスンする 2 つのバックエンド サーバーを指定しました。サーバー ブロックでは、ポート 80 をリッスンし、location / を設定し、proxy_pass ディレクティブを通じてリクエストを myapp に転送します。myapp プロキシはそれをバックエンド サーバーに転送します。
Nginx のリバース プロキシは、負荷分散アルゴリズム、エラー処理、セッション固定性などの高度な戦略も提供します。読者は関連ドキュメントを参照して詳細を学ぶことができます。
上記の分析を通じて、Nginx の HTTP リクエスト フィルタリングとリバース プロキシ機能が非常に強力であることがわかりますが、実際のアプリケーションではまだ機能が不十分です。その性能に注目する必要がある。 Nginx のパフォーマンスをテストするために、テスト用の ApacheBench (ab) ツールを使用し、Ubuntu 20.04 サーバーで実験を実施しました。
最初は HTTP リクエスト フィルタリングのテストです。リクエスト ヘッダーの User-Agent フィールドを「Mozilla/5.0」に設定し、1000 リクエストを Nginx サーバーに送信します。結果 Nginx が 1 秒あたり 22.33 リクエストを処理でき、各リクエストの平均時間は 44.76 ミリ秒で、リクエストの 90% が 54 ミリ秒以内に完了することがわかります。
ab -n 1000 -H "User-Agent: Mozilla/5.0" http://localhost/
次は、リバース プロキシ テストです。実際のアプリケーションをシミュレートするために、単純なバックエンド サーバーが使用されます。各リクエストの処理時間は 10 ミリ秒で、リクエストは同時に 2 つのバックエンド サーバーに開始されます:
Concurrency Level: 1 Time taken for tests: 44.780 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 159000 bytes HTML transferred: 0 bytes Requests per second: 22.33 [#/sec] (mean) Time per request: 44.780 [ms] (mean) Time per request: 44.780 [ms] (mean, across all concurrent requests) Transfer rate: 3.47 [Kbytes/sec] received
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
テスト結果は、Nginx が 1 秒あたり 966.41 リクエストを処理できることを示しています、およびそれぞれ リクエストの平均時間は 1.03 ミリ秒で、リクエストの 90% は 2 ミリ秒以内に完了します:
ab -n 1000 http://localhost/
テスト結果から、Nginx がインターセプトおよび転送する非常に強力な能力を備えていることがわかります。 HTTP リクエストを処理し、大量のリクエストを処理し、高いパフォーマンスを維持できます。ただし、Nginx のパフォーマンスは、サーバーのハードウェア能力、オペレーティング システムのパラメーター、Nginx の構成などの要因によっても制限されるため、実際のアプリケーションでは、実際の条件に応じて調整および最適化する必要があります。
結論
この記事では、Nginx の HTTP リクエスト フィルタリングとリバース プロキシ機能を分析し、その実装とパフォーマンスを紹介し、簡単なテストと分析を行います。一般的に使用される HTTP サーバーおよびリバース プロキシ サーバーとして、Nginx は強力な Web サービス機能を提供します。読者は、実際のニーズや環境に応じてさまざまな Nginx モジュールとパラメーターを選択および構成して、最高のパフォーマンスと効果を実現できます。
以上がNginx HTTP リクエスト フィルタリングとリバース プロキシ パフォーマンス分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。