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はタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

推薦する

HTML入力ボックスの最適化により、ユーザーエクスペリエンスと使いやすさが向上します。

ユーザーエクスペリエンスと使いやすさを向上させるために、入力ボックスなど、Web ページでユーザーが...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

MySQL データベース内の同じテーブルを同時にクエリして更新する方法

通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...

iframe を通じて DOM 要素のサイズ変更を監視する

開発プロセス中によく発生する問題は、div のサイズ変更をどのように監視するかということです。たとえ...

mysql5.7.19 winx64 インストールおよび構成方法のグラフィック チュートリアル (win10)

mysql 5.7.19 winx64のインストールチュートリアルは以下のように記録され、みんなと...

MySQLオンラインDDLの使用に関する詳細な説明

目次文章LOCKパラメータアルゴリズムパラメータCOPY TABLE プロセスIN-PLACEプロセ...

タブ効果を実現する js 開発プラグイン

この記事の例では、タブ効果を実現するためのjsプラグインの具体的なコードを参考までに共有しています。...

MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明

序文MySQL テーブルの主キーと外部キーを作成するときは、次の点に注意する必要があります。主キーと...

時間を節約できる Linux コマンド エイリアス 15 個

序文Linux システムの管理と保守のプロセスでは、多数のコマンドが使用されます。非常に長いコマンド...

ウェブページレイアウトに関する9つのヒント

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案 W...

Windows Server 2016 AD サーバーをセットアップする手順 (画像とテキスト)

導入: AD は Active Directory の略称で、中国語では Active Direct...

chkconfig および systemctl コマンドを使用して Linux サービスを有効または無効にする方法

これは Linux 管理者にとって重要な (そして素晴らしい) トピックなので、誰もが Linux ...

MySQL の instr を使用したファジー クエリ メソッドの紹介

MySQL の内部関数instrを使用すると、従来の like クエリ メソッドを置き換えることがで...

JSはプログレスバーをドラッグして要素の透明度を変更することを実装しています

今日ご紹介したいのは、ネイティブ JS を使用してプログレス バーをドラッグし、要素の透明度を変更す...

Linux で環境変数 JAVA_HOME を変更/設定する方法について簡単に説明します。

1. 永久的な変更、すべてのユーザーに有効# vi /etc/プロファイル//キーボードの[Shi...