(oneechanblog) – NGINX ユーザーが自分のWebサイト、Webアプリケーション、およびその他のWebリソースへのトラフィックを制御できるようにするさまざまなモジュールを提供します。 トラフィックを制限する主な理由の1つは、次のような乱用や攻撃を防ぐことです。 DoS ((サービス拒否)攻撃。
使用量またはトラフィックを制限する主な方法は3つあります NGINX:
接続(リクエスト)の数を制限します。
リクエストレート制限。
帯域幅の制限。
その上 NGINX トラフィック管理アプローチは、ユースケースに応じて、定義されたキー(最も一般的にはクライアントIPアドレス)に基づいて制限するように構成できます。 NGINXは、セッションCookieなどの他の変数もサポートします。
3部構成のシリーズの最初の部分では、接続数を制限する方法について説明します。 NGINX あなたのウェブサイト/アプリを保護するため。
NGINXで接続(リクエスト)の数を制限する方法–パート1
NGINXでの接続(リクエスト)のレート制限方法–パート2
NGINXで帯域幅の使用を制限する方法–パート3
そのことを覚えておいてください NGINX サーバーによって処理されている要求があり、要求ヘッダー全体が読み取られている場合にのみ、接続を制限することを検討します。 したがって、すべてのクライアント接続がカウントされるわけではありません。
NGINXの接続数を制限する
まず、を使用して、さまざまなキーの接続メトリックを格納する共有メモリ領域を定義する必要があります。 limit_conn_zone 指令。 前述のように、キーはテキスト、クライアントのリモートIPアドレスなどの変数、または両方の組み合わせにすることができます。
このディレクティブは、次の2つのパラメーターを受け取るHTTPコンテキストで有効です。 鍵 と 領域 (形式で zone_name:サイズ)。
limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;
拒否されたリクエストに対して返される応答ステータスコードを設定するには、次を使用します。 limit_conn_status ディレクティブは、HTTPステータスコードをパラメータとして受け取ります。 HTTP、サーバー、およびロケーションのコンテキストで有効です。
limit_conn_status 429;
接続を制限するには、 limit_conn 次の構成スニペットに示すように、使用するメモリ領域と許可される接続の最大数を設定するディレクティブ。 このディレクティブは、HTTP、サーバー、およびロケーションのコンテキストで有効です。
limit_conn limitconnbyaddr 50;
完全な構成は次のとおりです。
upstream api_service
server 127.0.0.1:9051;
server 10.1.1.77:9052;limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;
limit_conn_status 429;server
listen 80;
server_name testapp.tecmint.com;
root /var/www/html/testapp.tecmint.com/build;
index index.html;limit_conn limitconnbyaddr 50;
#include snippets/error_pages.conf;
proxy_read_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
location /
try_files $uri $uri/ /index.html =404 =403 =500;location /api
proxy_pass http://api_service;proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
Nginx接続制限
ファイルを保存して閉じます。
次に、 NGINX 次のコマンドを実行して、okを構成します。
$ sudo nginx -t
次に、リロードします NGINX 最近の変更を行うサービス:
$ sudo systemctl reload nginx
Nginx接続制限を確認してください
クライアントアプリケーションが許可されている接続の最大数を超えた場合、 NGINX 「429リクエストが多すぎます「クライアントに提供し、次のようなエントリをエラーログファイルに登録します。
2022/03/15 00:14:00 [error] 597443#0: *127 limiting connections by zone “limitconnbyaddr”, client: x.x.x.x, server: testapp.tecmimt.com, request: “GET /static/css/main.63fdefff.chunk.css.map HTTP/1.1”, host: “testapp.tecmimt.com”
Nginx接続制限エラー
アプリケーションへのNginx接続の数を制限する
を使用して、特定のサーバーの接続数を制限することもできます。 $ server_name 変化する:
upstream api_service
server 127.0.0.1:9051;
server 10.1.1.77:9052;limit_conn_zone $server_name zone=limitbyservers:10m;
limit_conn_status 429;server
listen 80;
server_name testapp.tecmint.com;
root /var/www/html/testapp.tecmint.com/build;
index index.html;limit_conn limitbyservers 2000;
#include snippets/error_pages.conf;
proxy_read_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
location /
try_files $uri $uri/ /index.html =404 =403 =500;location /api
proxy_pass http://api_service;proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
この構成により、 NGINX アプリケーションに電力を供給する仮想サーバーへの接続の総数を制限する testapp.tecmint.com到着 2000 接続。
ノート:クライアントIPに基づいて接続を制限することには欠点があります。 最後に、特にアプリケーションにアクセスする複数のユーザーが同じネットワーク上にあり、単一のネットワークの背後で作業している場合は、接続を複数のユーザーに制限できます。 NAT –すべての接続は同じIPアドレスから発信されます。
このような場合、アプリケーションレベルでクライアントを定義できるNGINXで利用可能な1つ以上の変数を使用できます。例は次のとおりです。 セッションCookie。
次のNginx関連の記事もお気に召すかもしれません:
今のところ以上です! このシリーズの次のパートでは、別の便利なトラフィック管理手法について説明します。 NGINX –リクエストレート制限。 それまで、私たちと一緒にいてください。