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 の水平および垂直中央揃えの問題の概要

最近、センタリングの問題に数多く遭遇したので、後で簡単に見つけられるように、時間をかけてそれらを要約...

Linux での tcpdump コマンドの詳細な分析と使用方法

導入簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

vscode で console.log を書く 2 つの簡単な方法の詳細な説明

(I) 方法 1: 事前にスクリプト タグ内に直接定義します。この HTML ファイルにのみ適用され...

Docker swarm を使用して Nebula Graph クラスターを迅速にデプロイする方法のチュートリアル

1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...

HTMLでカメラを読み込む方法

効果図: 全体的な効果: ビデオ読み込み中: 写真:ステップ1: HTML要素を作成するまず、HTM...

VMware 仮想マシンに Android x86 をインストールする方法

アプリをテストしたいが、それを携帯電話で実行したくない場合があります。この場合、仮想マシンを使用して...

VUE ユニアプリコア知識の簡単な紹介

目次仕様a. ページファイルはVueの単一ファイルコンポーネント仕様に準拠しています。 b. コンポ...

フェッチネットワークリクエストのカプセル化例の詳細な説明

エクスポートデフォルト({ URL、 メソッド = 'GET'、 データ = nu...

MySQL のロードバランサーとして nginx を使用する方法

注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、-...

JavaScript フロー制御 (分岐)

目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...

複数のネットワークカードを備えた Linux システムでのルーティング構成の詳細な説明

Linux でのルーティング設定コマンド1. ホストルーティングを追加する ルートを追加 -host...

Ubuntu 18.04 コマンドでタッチパッドを無効/有効にする

Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...

Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートしま...

Ubuntu 19.10 で ssh サービスを有効にする (詳細なプロセス)

Ubuntuでsshを開くのに1時間以上かかりました。主な原因は、最初に読んだチュートリアルの手順...