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

推薦する

Linux での vi (vim) の新しい使い方のまとめ

私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...

Reactの3つの主要属性における状態の使用の詳細な説明

目次クラスコンポーネント機能コンポーネントsetStateの落とし穴React では多くの場所でデー...

Mysqlチュートリアルでのグループランキングの実装例の詳細な説明

目次1. データソース2. データの総合順位1) 総合ランキング2) 同順位3) 同順位3. データ...

Dockerコンテナ間の通信と外部ネットワーク通信の操作

コンテナ間の通信1. コンテナのネットワーク共有このモードの Docker コンテナはネットワーク ...

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

MySQLデータベースが予期せずクラッシュし、テーブルデータファイルが破損して起動できなくなる問題を解決します。

問題: MySQL データベースが予期せずクラッシュしたため、データベースを起動できませんでした。エ...

VMware仮想マシンの起動時に黒い画面が表示される問題を解決する

# VMware ハードディスクの起動優先順位を調整するステップ 1: 電源をオンにすると、BIOS...

HTMLでは、全体的なスタイルとレイアウトを崩さずに、部分的に強制スクロールバーを使用できます。

まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...

Vue での weixin-js-sdk の一般的な使用方法の詳細な説明

リンク: https://qydev.weixin.qq.com/wiki/index.php?ti...

Firefox で Webdings フォントをサポートする方法

Firefox、Opera、その他のブラウザは Webdings フォントをサポートしていません。回...

fullpage.js フルスクリーンスクロールの具体的な使い方

1.fullpage.js ダウンロードアドレスhttps://github.com/alvarot...

高さ:100% が機能しないのはなぜですか?

高さ:100% が機能しないのはなぜですか?この知識は不人気ではありませんが、使用する際には混乱する...

Linux Centos7 に mysql8 をインストールするチュートリアル

1. RPMバージョンのインストールデータベースの他のバージョンがあるかどうかを確認し、ある場合は完...

Linuxで新しいユーザーを作成し、指定されたディレクトリへの権限を付与する

1 ユーザーを作成し、ユーザーのルートパスとパスワードを指定します useradd -d /home...