Nginx ベースのアクセス制御と接続制限の実装

Nginx ベースのアクセス制御と接続制限の実装

limit_conn_zone は、接続数を制限するために接続状態を記録するzone空間を宣言します。
zoneは接続ステータスを保存するためのスペースであり、キーと値のペアで保存されます。通常、クライアント アドレス$binary_remote_addrが各接続を識別するkeyとして使用されます。
zoneスペースが使い果たされると、 503(Service Temporarily Unavailable)

リクエスト制限 limit_req_mudule

limit_req_mudule : HTTPリクエスト頻度の制限。1 つのTCP接続で複数のHTTPリクエストを確立できます。
設定構文:

序文

Nginxの組み込みモジュールは、同時リクエスト数の制限とリクエストのソースの制限をサポートしています。 DDOS攻撃を防ぐために使用できます。
この記事を読むには、 nginx構成ファイルの構造と構文を知っておく必要があります。

1. デフォルトの設定構文

メイン設定ファイルとしてのnginx.conf

include /etc/nginx/conf.d/*.conf は、このディレクトリ内の.confファイルも読み込みます。

1.1 グローバルおよびサービスレベル

user 同時接続数を増やすために、ユーザーワーカープロセスを使用するように設定します。CPU と一貫性を保ちます。8 つのコアに対して 8 つの error_logs を設定します。nginx エラーログ pid。nginx サービス起動 pid

1.2 イベント用イベントモジュール

worker_connections プロセスが処理できる接続の最大数は、使用されるカーネルモデルを定義します。

1.3 サーバー

root ホームページのパス index ホームページでアクセスするデフォルトのページ error_page 500 502 503 504 /50x.html エラーページの先頭の 500 は **`http ステータス コード`** です
systemctl nginx.service を再起動して nginx を再起動します。
systemctl reload nginx.service はサービスをシャットダウンせずに穏やかに再起動します。

2. HTTP

curl-v http://www.baidu.com >/dev/null #-v はステータスコードやその他の情報も表示します nginx -V # nginx のバージョンと設定ファイルの情報を表示します

3. ログ

ログの種類: error.log および access.log

error.log (http リクエストの処理のエラー ステータスと nginx 自体のエラー ステータスを記録します)
access.log (各 http リクエストのアクセス ステータス)

log_format: ログ記録形式を設定し、error.log および access.log にログを記録する方法を定義します。log_format 構成は、http モジュールでのみ構成できます。

access_log は http で設定されます。

4. 変数

接続制限 limit_conn_module

limit_ : TCP 接続頻度の制限。1 つの TCP 接続で複数の HTTP 要求を確立できます。
設定構文:

limit_conn_module 構文範囲例示する
limit_conn_zone は、ゾーン = スペース名: スペース サイズを識別します。 httpストレージスペースを宣言するために使用される
limit_conn スペース名同時制限数; http、サーバーまたは場所ストレージスペースに対する同時リクエスト数を制限するために使用されます
limit_conn_log_level ログレベル; http、サーバーまたは場所最大接続数に達すると、ログレベルが記録されます
limit_conn_status ステータスコード; http、サーバーまたは場所制限を超えると、返される応答ステータスコードはデフォルトで503になります。
limit_req_mudule 構文範囲例示する
limit_req_zone キー zone=スペース名:スペース サイズ rate=1 秒あたりのリクエスト数; httpストレージスペースを宣言するために使用される
limit_req zone=スペース名[burst=キューの数] [nodelay]; http、サーバーまたは場所ストレージスペースに対する同時リクエスト数を制限するために使用されます

ここのゾーンは接続を保存するためのスペースでもあります。

バーストとノードレイ

burstnodelay 、同時リクエストの処理を遅延するためのバッファと戦略を設定します。
まず、次のzone構成があると仮定します。

http {
 limit_req_zone $binan_remote_addr ゾーン=req_zone:1m レート=10r/s;
}

ケース1: limit_req zone=req_zone;

  • 1の 1 秒間に10リクエストが送信され、応答は正常です。
  • 1 1 秒間に13リクエストが送信されます。最初の10リクエストは正常に応答され、最後の3 503(Service Temporarily Unavailable)

brustnodelayがない場合、 rate=10r/s 1 秒あたり10リクエストしか実行できず、 503を超えるエラーが直接返されます。

ケース2: limit_req zone=req_zone brust=5;

  • 1の 1 秒間に10リクエストが送信され、応答は正常です。
  • 1 1 秒間に13リクエストが送信されます。最初の10リクエストは通常​​どおり応答され、最後の3リクエストは一時brustされ、応答を待機します。
  • 1 1 秒間に、 20リクエストが送信されます。最初の10リクエストは通常​​どおり応答されます。次の5リクエストはbrustに入れられ、応答を待機します。最後の5のリクエストは503(Service Temporarily Unavailable)を返します。 2秒間に、 brust内の5リクエストが実行されます。
  • 最初の1に、 20リクエストが送信されます。最初の10リクエストは正常に応答され、次の5リクエストはbrustに送られて応答を待機し、最後の5件のリクエストは503(Service Temporarily Unavailable)を返します。 2秒間に、 6件のリクエストが送信され、 brust内の5リクエストが実行され、 5リクエストがbrustに送られて応答を待機し、残りの1リクエストは503(Service Temporarily Unavailable)返します。

brust=5が追加され、 nodelayが追加されていない場合、容量5のバッファが存在します。 rate=10r/s 、1 秒あたり10リクエストしか実行できません。超過したリクエストはバッファに入れられます。バッファがいっぱいになると、 503エラーが直接返されます。バッファはリクエストを取り出し、次の期間に応答します。さらにリクエストが来る場合、バッファにそれらを格納し続けます。リクエストが多すぎる場合は、 503エラーが返されます。

ケース3: limit_req zone=req_zone brust=5 nodelay;

  • 1の 1 秒間に10リクエストが送信され、応答は正常です。
  • 最初の113リクエストが送信され、 13正常に応答されました。
  • 1 1 秒間に20リクエストが送信されます。最初の15リクエストは正常に応答され、最後の5 503(Service Temporarily Unavailable)
  • 最初の120リクエストが送信され、最初の15リクエストは正常に応答され、最後の5リクエストは503(Service Temporarily Unavailable)を返します。 2秒間に6リクエストが送信され、正常に応答されます。

brust=5およびnodelayの場合、容量5のバッファがあり、 rate=10r/s 1 秒あたり15リクエストを実行できます ( 15=10+5 )。より直接的に503エラーを返します。

IPベースのアクセス制御

http_ access_module: IP ベースのアクセス制御。プロキシを介して制限を回避できます。善良なユーザーからは保護されますが、悪意のあるユーザーからは保護されません。

http_access_module 構文範囲例示する
許可する IP アドレス | CIDR ネットワーク セグメント | unix: | すべて; http、サーバー、場所、limit_except IPアドレス、CIDRネットワークセグメント、Unixソケット、またはすべてのソースからのアクセスを許可する
IP アドレスを拒否 | CIDR ネットワーク セグメント | unix: | すべて; http、サーバー、場所、limit_except IPアドレス、CIDRネットワークセグメント、Unixソケット、またはすべてのソースによるアクセスをブロックします。

許可と拒否は上から下の順に配置され、最初に一致するルールを見つけてアクセスが許可されるかどうかを決定します。そのため、通常はallが最後に配置されます。

位置 / {
 192.168.1.1 を拒否します。
 192.168.1.0/24 を許可します。
 10.1.1.0/16 を許可します。
 2001:0db8::/32 を許可します。
 すべてを否定する;
}

ユーザーパスワードに基づくアクセス制御

ht tp_auth_basic_module: ユーザーパスワードに一致するファイルに基づくログイン

http_auth_basic_module 構文範囲例示する
auth_basic アカウントのパスワードを入力してください| off; http、サーバー、場所、limit_exceptユーザーのログインプロンプトを表示します(一部のブラウザではプロンプトは表示されません)
auth_basic_user_file は、アカウント パスワードが保存されるファイル パスです。 http、サーバー、場所、limit_exceptファイルからアカウントパスワードを一致させる

パスワード ファイルはhtpasswdによって生成できます。htpasswd htpasswd yum install -y httpd-toolsインストールする必要があります。

# -c は新しいファイルを作成し、-b はパラメータに直接パスワードを入力します $ htpasswd -bc /etc/nginx/conf.d/passwd user1 pw1
ユーザーuser1のパスワードを追加しています
$ htpasswd -b /etc/nginx/conf.d/passwd ユーザー2 パスワード2
ユーザーuser2のパスワードを追加
$ cat /etc/nginx/conf.d/passwd 
ユーザー1:$apr1$7v/m0.IF$2kpM9NVVxbAv.jSUvUQr01
ユーザー2:$apr1$XmoO4Zzy$Df76U0Gzxbd7.5vXE0UseE0

参考文献

制限接続モジュール

制限要件

http_アクセスモジュール

http_auth_basic_モジュール

要約する

以上が、Nginx をベースとしたアクセス制御と接続制限についてご紹介した内容です。お役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、すぐに返信させていただきます。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • nginx のリクエスト制限(接続制限とリクエスト制限)の詳細な説明
  • Nginx のアクセス制御とパラメータ調整方法
  • Nginx のリクエスト制限とアクセス制御の実装に関する簡単な説明
  • Nginx アンチホットリンク、Nginx アクセス制御、Nginx 解析 PHP 設定の詳細な説明
  • nginx アクセス制御の 2 つの方法

<<:  MySQLデータベースの追加、削除、変更操作の詳細な説明

>>:  Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

推薦する

Web面接におけるJS事前解析と変数プロモーションの違い

目次事前分析とは何ですか?変数と関数の準備の違いvar 変数の繰り返し宣言変数と関数の昇格の優先順位...

Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

Linux で新たに発見された sudo の脆弱性を悪用すると、特定のユーザーが root としてコ...

MySQL のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

MySQL マルチテーブル結合入門チュートリアル

接続は、実際の外部キー(人工的に作成された 2 つのテーブル間の対応関係を指します。対照的に、FOR...

ネイティブ JavaScript でオブジェクトが空かどうかをチェックする実装例

目次ネイティブJavaScriptとはA. 新しいブラウザでnullオブジェクトをチェックするコンス...

Vue でのスロット配置と使用状況分析

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

PHP+nginx サービス 500 502 エラーのトラブルシューティングのアイデアの詳細な説明

概要オンラインサービスへのアクセス中に 500 または 502 エラーが発生した場合、緊急処理とトラ...

Linux システムコマンドのメモ

この記事では、Linux システム コマンドについて説明します。ご参考までに、詳細は以下の通りです。...

CSS3 で画像ドロワー効果を実装するためのサンプル コード

いつものように、まずは画像効果を投稿しましょう: このエフェクトの原理は非常にシンプルです。CSS3...

CentOS7 構成 Alibaba Cloud yum ソースメソッドコード

Centos yumフォルダを開くコマンドcd /etc/yum.repos.d/を入力します。 w...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

HTML+CSS+JS でキャンバスがマウスの小さな円に追従する特殊効果のソースコードを実現

効果(ソースコードは最後にあります): 成し遂げる: 1. タグを定義します。 <h1>...

Webpack-cliが正常にインストールされたら、詳細についてはwebpack -vエラーケースを確認してください。

目次質問1. webpack webpack-cliをインストールする2. webpackのバージョ...