インターネットの発展に伴い、クラウド上に展開されるアプリケーションが増加しており、クラウドサービスのセキュリティと安定性をいかに確保するかが重要な課題となっています。中でも Nginx は、高性能 Web サーバーおよびリバース プロキシとして、クラウド サービスの導入と管理に広く使用されています。実際のアプリケーションでは、頻繁にアクセスされる IP、悪意のあるアクセス要求、大量のトラフィックのアクセスなど、いくつかのシナリオでアクセスを制限する必要があります。この記事では、クラウドサービスの安全性と安定性を確保するために、一定時間内のアクセス数を制限する時間帯に基づくアクセス制御方法を紹介します。
1. タイム ウィンドウとは
タイム ウィンドウとは、イベントを一定期間内に制限する方法を指します。アクセス制御では、時間枠に基づいてアクセスを制限できます。たとえば、1 分間に最大 10 回の訪問、5 分間に最大 100 回の訪問、1 時間に最大 1,000 回の訪問などです。時間枠は実際の状況に応じて調整でき、柔軟でカスタマイズ可能です。
2. Nginx リバース プロキシでのタイム ウィンドウ アクセス制御
nginx タイム ウィンドウ アクセス制御を使用する前に、以下をインストールする必要があります。それは ngx_http_limit_req_module モジュールです。このモジュールは、同じ期間内でのクライアント要求の到着頻度を制御できます。通常、nginx をインストールすると、このモジュールも同時にインストールされます。インストールされていない場合は、nginx を再コンパイルしてインストールする必要があります。インストール方法は次のとおりです:
$ wget http://nginx.org/download/nginx-1.14.0.tar.gz $ tar zxvf nginx-1.14.0.tar.gz $ cd nginx-1.14.0/ $ ./configure --prefix=/usr/local/nginx --add-module=../nginx-limit-req-module-master $ make $ sudo make install
次の内容を Nginx リバース プロキシ構成ファイルに追加します。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server{ ... location /{ limit_req zone=one burst=5; proxy_pass http://backend; } }
この構成では、limit_req_zone は制限領域 1 を定義します。ここで、10m はメモリ サイズです。実際のニーズに応じて調整してください。 rate=1r/s は 1 秒あたり 1 つのリクエストを定義します。 Limit_req ゾーン=1 バースト=5 がロケーションに追加されます。これは、リクエストの数が 1 秒を超えると、超過したリクエストは以降のピーク値 5 リクエストで処理されることを意味します。
構成が完了したら、次のように ab ツールを使用してテストできます。
$ ab -n 100 -c 10 http://localhost/ This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Finished 100 requests
このコマンド意味: 100 個のリクエストを送信し、同時リクエストの数は 10 です。テスト結果: 1 秒以内に 10 件のリクエストが送信されると、次のように残りのリクエストが制限され、429 エラーが生成されます:
$ ab -n 100 -c 10 http://localhost/ This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Finished 100 requests Server Software: nginx/1.14.0 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 0 bytes Concurrency Level: 10 Time taken for tests: 0.062 seconds Complete requests: 100 Failed requests: 9 (Connect: 0, Receive: 0, Length: 0, Exceptions: 9) Non-2xx responses: 9 Requests per second: 1617.28 [#/sec] (mean) Time per request: 6.173 [ms] (mean) Time per request: 0.617 [ms] (mean, across all concurrent requests) Transfer rate: 0.00 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.2 1 1 Processing: 1 5 9.8 3 47 Waiting: 1 5 9.8 3 47 Total: 1 6 9.8 4 47 Percentage of the requests served within a certain time (ms) 50% 4 66% 5 75% 5 80% 6 90% 15 95% 47 98% 47 99% 47 100% 47 (longest request)
3. 概要
クラウド サービスの展開と管理、アクセス制御は非常に重要です。 Nginx リバース プロキシのタイム ウィンドウ ベースのアクセス制御を通じて、アクセス頻度を効果的に制御し、クラウド サービスのセキュリティと安定性を確保できます。この方法は、高頻度のリクエストを制限するだけでなく、悪意のあるアクセス リクエストも制限し、クラウド サービスの信頼性とセキュリティを効果的に向上させることができます。
以上がNginx リバースプロキシにおけるタイムウィンドウベースのアクセス制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。