nginx トラフィック制御 レート制限は非常に便利ですが、Nginx では誤解され、誤って設定されることが多い機能です。これを使用して、ユーザーが特定の時間内に実行できる HTTP リクエストの数を制限できます。リクエストは、単純な Web サイトのホームページに対する GET リクエスト、またはログイン フォームに対する POST リクエストになります。レート制限は、ブルートフォースによるパスワードクラッキングの速度を遅くするなど、セキュリティ目的で使用できます。また、受信リクエストのレートを実際のユーザーの標準的な値に制限し、ターゲット URL アドレスを(ログ経由で)識別することで、DDOS 攻撃から保護するためにも使用できます。より一般的には、この機能は、多数の同時ユーザー要求によって上流のアプリケーション サーバーが過負荷になるのを防ぐために使用されます。 以下では、Nginx のトラフィック制限の基本と高度な設定を紹介します。「トラフィック制限」は Nginx Plus にも適用されます。 1. Nginxのフローを制限する方法 Nginx の「フロー制限」は、帯域幅が制限されている緊急事態に対処するために通信およびパケット交換コンピュータ ネットワークで広く使用されているリーキー バケット アルゴリズムを使用します。それは、口からは水が流れ出ているが、底からは水が漏れているバケツのようなものです。バケツから水が注がれる速度がバケツの底から水が漏れる速度よりも速い場合、バケツの水は溢れます。同様に、リクエスト処理の観点では、水はクライアントからのリクエストを表し、バケツは「先入れ先出しスケジューリング アルゴリズム」(FIFO) に従って処理を待機しているリクエストのキューを表します。バケツの底から漏れる水は、バッファから出てサーバーによって処理されるリクエストを表し、バケツから溢れる水は、破棄されて処理されないリクエストを表します。 2. 基本的な電流制限を設定する 「トラフィック制限」設定には、以下に示すように、 192.168.62.155 の設定: limit_req_zone $binary_remote_addr ゾーン=mylimit:10m レート=1r/s; アップストリーム myweb { サーバー 192.168.62.157:80 重み=1 max_fails=1 fail_timeout=1; } サーバー{ 聞く 80; server_name ローカルホスト; 場所 /ログイン { 制限要求ゾーン=mylimit; proxy_pass http://myweb; proxy_set_header ホスト $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 192.168.62.157 の設定: サーバー{ 聞く 80; server_name ローカルホスト; 場所 /ログイン { ルート /usr/share/nginx/html; インデックス index.html index.html; } } 2回クリックした後
各 IP アドレスは、1 秒あたり 3. 緊急事態への対応 1000 ミリ秒以内に 2 つのリクエストを受信した場合はどうなりますか? 2 番目のリクエストでは、Nginx はクライアントにエラーを返します。アプリケーションは本質的にバースト的になる傾向があるため、これは望ましいことではないかもしれません。代わりに、余分なリクエストをバッファリングして、タイムリーに処理したいと考えています。設定を更新し、 limit_req_zone $binary_remote_addr ゾーン=mylimit:10m レート=10r/s; アップストリーム myweb { サーバー 192.168.62.157:80 重み=1 max_fails=1 fail_timeout=1; } サーバー{ 聞く 80; server_name ローカルホスト; 場所 /ログイン { limit_req ゾーン=mylimit バースト=20; proxy_pass http://myweb; proxy_set_header ホスト $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
つまり、特定の IP アドレスから 21 件のリクエストが送信された場合、Nginx は最初のリクエストをすぐに上流サーバー ファームに送信し、残りの 20 件のリクエストをキューに配置します。次に、キューに入れられたリクエストを 100 ミリ秒ごとに転送し、着信リクエストによってキューに入れられたリクエストの数が 20 を超えた場合にのみ、Nginx はクライアントにエラーを返します。 4. フロー制御関連の機能を設定する 1. ログを設定する デフォルトでは、Nginx はレート制限により遅延またはドロップされたリクエストを以下のようにログに記録します。
ログエントリに含まれるフィールド:
デフォルトでは、Nginx は上記の例の ログの場所とレベルを必ず定義してください。 limit_req_zone $binary_remote_addr ゾーン=mylimit:10m レート=1r/s; アップストリーム myweb { サーバー 192.168.62.157:80 重み=1 max_fails=1 fail_timeout=1; } サーバー{ 聞く 80; server_name ローカルホスト; 場所 /ログイン { limit_req ゾーン=mylimit バースト=20; limit_req_log_level 警告; proxy_pass http://myweb; proxy_set_header ホスト $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } テストにアクセスし続けてerror.logログを確認します 2. クライアントに送信されたエラーコード 通常、クライアントが設定されたトラフィック制限を超えると、Nginx はステータス コード 503 (サービスが一時的に利用できません) で応答します。 limit_req_zone $binary_remote_addr ゾーン=mylimit:10m レート=10r/s; アップストリーム myweb { サーバー 192.168.62.157:80 重み=1 max_fails=1 fail_timeout=1; } サーバー{ 聞く 80; server_name ローカルホスト; 場所 /ログイン { 制限要求ゾーン=mylimit; limit_req_log_level 警告; 制限要求ステータス 404; proxy_pass http://myweb; proxy_set_header ホスト $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 5. nginxトラフィック制御の概要 ここでは、HTTP リクエストのさまざまな場所に対するリクエスト レートの設定や、「レート制限」の nginx アクセス制御 1. nginx アクセス制御モジュール (1)IPベースのアクセス制御:http_access_module 2. IPベースのアクセス制御 1. 設定構文 構文: allow address | CIDR | unix: | all; デフォルト: いいえ デフォルトのコンテキスト: http、server、location 構文: deny address | CIDR | unix: | all; デフォルト: いいえ デフォルトのコンテキスト: http、server、location 2. サーバー{ 聞く 80; server_name ローカルホスト; 場所 ~ ^/admin { ルート /home/www/html; インデックス index.html index.hml; 192.168.1.8 を拒否します。 すべて許可する。 #192.168.1.8 を拒否します。 } } #注記: 最初にアクセスを許可した場合は、アクセスを拒否する方法を定義します。その場合、アクセス拒否は効果がありません。 仮想マシンのホスト IP は 3. すべてのリクエストを拒否する場所を指定する 特定の URL アドレスへのリクエストのレートを制限するのではなく、すべてのリクエストを拒否したい場合は、 サーバー{ 聞く 80; server_name ローカルホスト; 場所 /foo.html { ルート /home/www/html; すべてを否定する; } } 3. ユーザーの信頼に基づいたログイン 1. 設定構文 構文: auth_basic string | off; デフォルト:auth_basic オフ; コンテキスト: http、サーバー、場所、limit_except 構文: auth_basic_user_file ファイル; デフォルト: コンテキストなし デフォルトでは: http、server、location、limit_except ファイル: ユーザー名とパスワード情報を保存するファイル。 2. 設定例
サーバー{ 聞く 80; server_name ローカルホスト; 場所 ~ ^/admin { ルート /home/www/html; インデックス index.html index.hml; auth_basic "認証アクセステスト!"; auth_basic_user_file /etc/nginx/auth_conf; } }
3. パスワードファイルを作成する [root@192 ~]# mkdir /home/www/html/admin -p [root@192 ~]# vim /home/www/html/admin こんにちはqf [root@192 ~]# yum install -y httpd-tools #htpasswd はオープンソースの http サーバー apache httpd のコマンド ツールで、http 基本認証のパスワード ファイルを生成するために使用されます [root@192 ~]# htpasswd -cm /etc/nginx/auth_conf user10 // 初めて新しいユーザーを作成します [root@192 ~]# htpasswd -m /etc/nginx/auth_conf user20 // 2 回目にユーザーを追加します [root@192 ~]# cat /etc/nginx/auth_conf ユーザー10:$apr1$MOa9UVqF$RlYRMk7eprViEpNtDV0n40 ユーザー20:$apr1$biHJhW03$xboNUJgHME6yDd17gkQNb0 4. アクセステスト 5. 制限事項 (1)ユーザー情報はファイルに依存している (2)機械的な操作と管理のため効率が悪い nginx フロー制御とアクセス制御の実装に関するこの記事はこれで終わりです。より関連性の高い nginx フロー制御とアクセス制御のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL はどのようにしてデータの整合性を確保するのでしょうか?
>>: Vue.jsでタブ切り替えと色変更操作を実装する解説
目次概要コンソールログコンソール.infoコンソール.警告コンソールエラーコンソールテーブルコンソー...
目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...
目次序文MySQL マスタースレーブレプリケーションMySQL でサポートされているレプリケーション...
さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...
1. Dockerをインストールするyum -y install docker-ioインストールが完...
なぜ?最も簡単に言えば、ピクセルは均等ではないということです。携帯電話に表示される写真はとても繊細に...
Mysqlリモート接続構成を実装する2つの方法会社で働いていると、誰かのコンピュータに保存されている...
なぜ高さを設定できるのでしょうか。<h1 /> などの要素とは異なり、「セミインライン」...
1. コマンド > と >> の違いコマンド>: ファイルが存在する場合は、...
Nginxを使用する目的Alibaba Cloud ECS クラウド サーバーを使用して、まずは著者...
この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...
inline-block プロパティ値は、「インライン」要素のマージンとパディングを制御する必要があ...
作業開発プロセス中に、顧客の名前、携帯電話番号、ID カード、およびドキュメントの種類を動的に保存す...
DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...
1. 監視アーキテクチャ図 2. 実装のアイデアJenkins に Metrics プラグインをイン...