この記事では、nginxの使用方法について説明します HttpLimitReqModule 特定のセッションのリクエスト数を制限します。 これは、たとえば、1秒間に複数のリクエストを実行するボットによってサイトが攻撃され、サーバーの負荷が増加する場合に役立ちます。 HttpLimitReqModuleを使用すると、レート制限を定義できます。訪問者がこのレートを超えると、503エラーが発生します。
1HttpLimitReqModuleの使用
あなたの nginx.conf..。
nano /etc/nginx/nginx.conf
…そしてセッション状態が保存される領域を定義します-これは内部に入る必要があります http {} 容器:
http { [...] limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; [...] }
このエリアは 1 10MBのストレージが割り当てられます。 変数の代わりに $ remote_addr、変数を使用します $ binary_remote_addr これにより、状態のサイズが64バイトに削減されます。 1MBのゾーンには約16,000の状態が存在する可能性があるため、10MBでは約160,000の状態が許容されるため、訪問者にとってはこれで十分です。 レートは1秒あたり1リクエストに制限されています。 ここでは整数値を使用する必要があることに注意してください。したがって、制限を1秒あたりのリクエストの半分に設定する場合は、 30r / m (1分あたり30リクエスト)。
この制限を機能させるために、 limit_req 指令。 このディレクティブはで使用できます http {}、 サーバー{}、 と 位置 {} コンテナですが、私の意見では、それは 位置 {} アプリサーバー(PHP-FPM、mongrelなど)にリクエストを渡すコンテナー。そうしないと、多数の画像、CSS、JavaScriptファイルを含む単一のページを読み込むと、単一のページで指定されたレート制限を超える可能性があります。リクエスト。
だからこれを入れましょう 場所〜 .php $ {} 容器:
[...] location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; limit_req zone=one burst=5; } [...]
limit_req zone=1バースト=5; このレート制限が以前に定義したセッションストレージ領域に属することを指定します( zone = one)これは、レート制限が1r/sであることを意味します。 バーストオプションの意味は、一種のキューとして想像できます。 これは、レート制限を超えると、次のリクエストが遅延し、バーストパラメータで指定された数よりも多くのリクエストがキューで待機している場合にのみ、503エラーが発生することを意味します(例:次のようになります)。
)。
このキューを使用したくない場合(つまり、誰かがレート制限を超えた場合はすぐに503を配信する)、を使用する必要があります。 遅延なし オプション:
[...] location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; limit_req zone=one burst=5 nodelay; } [...]
変更を有効にするには、nginxをリロードすることを忘れないでください。
systemctl nginx reload
2リンク
The post Nginxによるレート制限 appeared first on Gamingsym Japan.