ホームページ 運用・保守 Nginx Nginxに基づいたアクセス制御と接続制限を実装する方法

Nginxに基づいたアクセス制御と接続制限を実装する方法

May 14, 2023 pm 06:46 PM
nginx

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

Nginxに基づいたアクセス制御と接続制限を実装する方法

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

/etc/nginx/conf が含まれます。 d/*.conf が読み込まれると、ディレクトリの .conf も読み込まれます。

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

user 设置使用用户
worker_processes 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
error_log nginx的错误日志
pid nginx服务启动时候pid
ログイン後にコピー

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

worker_connections一个进程允许处理的最大连接数
use定义使用的内核模型
ログイン後にコピー

1.3 サーバー

root 首页的路径
index 首页默认访问哪个页面
error_page 500 502 503 504 /50x.html 错误页面 前面的500是**`http状态码`**
systemctl restart nginx.service 重启nginx
systemctl reload nginx.service 不关闭服务柔和地重启
ログイン後にコピー

2. http

Nginxに基づいたアクセス制御と接続制限を実装する方法

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 に記録されるスタイルを定義します。 http モジュールでのみ設定されます。

access_log は http で設定されます。

4. 変数

Nginxに基づいたアクセス制御と接続制限を実装する方法

#接続制限limit_conn_module

limit_

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

limit_conn_module 構文limit_conn_zone 識別ゾーン=スペース名:スペース サイズ;limit_conn スペース名の同時実行性制限数;limit_conn_log_levelログレベル;limit_conn_status ステータス コード;limit_conn_zone は を宣言します。 zone
範囲説明
httpストレージ スペースの宣言に使用されます
http、サーバーまたは場所特定のストレージスペースの同時実行数を制限するために使用されます
http、サーバーまたは場所接続制限の最大数に達すると、ログのレベルが記録されます
http、サーバーまたは場所制限を超えると、応答ステータス コードが返されます。デフォルトは 503です。
数量を制限するための、接続ステータスを記録するためのスペース。 zone

は、キーと値のペアで保存された接続ステータスを保存するスペースで、通常は各接続を識別するためにクライアント アドレス $binary_remote_addrkey として使用します。 。 ゾーンのスペースがなくなると、サーバーは後続のすべてのリクエストに対して
503 (サービスが一時的に利用できなくなります) エラーを返します。 リクエスト制限 limit_req_mudule

##limit_req_mudule:

http

リクエスト頻度制限、1 つの tcp 接続で作成可能複数の http リクエスト。 設定構文:

limit_req_mudule 構文範囲##limit_req_zone キー ゾーン=スペース名:スペース サイズ rate=1 秒あたりのリクエスト数;httpストレージ スペースの宣言に使用されますlimit_req ゾーン=スペース名 [バースト=キューの数] [遅延なし];http、サーバーまたは場所特定のストレージスペースの同時実行数を制限するために使用されます
説明

这里的zone也是用来存储连接的一个空间。

burst 和 nodelay

burstnodelay对并发请求设置了一个缓冲区和是否延迟处理的策略。
先假设有如下zone配置。

http {
 limit_req_zone $binan_remote_addr zone=req_zone:1m rate=10r/s;
}
ログイン後にコピー

情况 1:limit_req zone=req_zone;

  • 1秒发送10个请求, 正常响应。

  • 1秒发送13个请求, 前10个请求正常响应, 后3个请求返回503(service temporarily unavailable)

不加brustnodelay的情况下,rate=10r/s每秒只能执行10次请求, 多的直接返回503错误。

情况 2:limit_req zone=req_zone brust=5;

  • 1秒发送10个请求, 正常响应。

  • 1秒发送13个请求, 前10个请求正常响应, 后3个请求放入brust等待响应。

  • 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每秒只能执行10次请求, 多的放到缓冲区中, 如果缓冲区满了, 就直接返回503错误。而缓冲区在下一个时间段会取出请求进行响应, 如果还有请求进来, 则继续放缓冲区, 多的就返回503错误。

情况 3:limit_req zone=req_zone brust=5 nodelay;

  • 1秒发送10个请求, 正常响应。

  • 1秒发送13个请求,13个请求正常响应。

  • 1秒发送20个请求, 前15个请求正常响应, 后5个请求返回503(service temporarily unavailable)

  • 1秒发送20个请求, 前15个请求正常响应, 后5个请求返回503(service temporarily unavailable), 第2秒发送6个请求, 正常响应。

brust=5nodelay的情况下, 有一个容量为5的缓冲区,rate=10r/s每秒能执行15次请求,15=10+5。多的直接返回503错误。

基于 ip 的访问控制

http_access_module: 基于ip的访问控制, 通过代理可以绕过限制, 防君子不防小人。

http_access_module语法范围说明
allow ip地址 | cidr网段 | unix: | all;http、server、location和limit_except允许ip地址、cidr格式的网段、unix套接字或所有来源访问
deny ip地址 | cidr网段 | unix: | all;http、server、location和limit_except禁止ip地址、cidr格式的网段、unix套接字或所有来源访问

allow和deny会按照顺序, 从上往下, 找到第一个匹配规则, 判断是否允许访问, 所以一般把all放最后

location / {
 deny 192.168.1.1;
 allow 192.168.1.0/24;
 allow 10.1.1.0/16;
 allow 2001:0db8::/32;
 deny all;
}
ログイン後にコピー

基于用户密码的访问控制

http_auth_basic_module: 基于文件匹配用户密码的登录

http_auth_basic_module语法范围说明
auth_basic 请输入你的帐号密码 | off;http、server、location和limit_except显示用户登录提示 (有些浏览器不显示提示)
auth_basic_user_file 存储帐号密码的文件路径;http、server、location和limit_except从文件中匹配帐号密码

密码文件可以通过htpasswd生成,htpasswd需要安装yum install -y httpd-tools

# -c 创建新文件, -b在参数中直接输入密码
$ htpasswd -bc /etc/nginx/conf.d/passwd user1 pw1
adding password for user user1
$ htpasswd -b /etc/nginx/conf.d/passwd user2 pw2
adding password for user user2
$ cat /etc/nginx/conf.d/passwd 
user1:$apr1$7v/m0.if$2kpm9nvvxbav.jsuvuqr01
user2:$apr1$xmoo4zzy$df76u0gzxbd7.5vxe0use0
ログイン後にコピー

以上がNginxに基づいたアクセス制御と接続制限を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

nginxでクラウドサーバードメイン名を構成する方法 nginxでクラウドサーバードメイン名を構成する方法 Apr 14, 2025 pm 12:18 PM

クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Nginxバージョンを確認する方法 Nginxバージョンを確認する方法 Apr 14, 2025 am 11:57 AM

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

Dockerでミラーを作成する方法 Dockerでミラーを作成する方法 Apr 15, 2025 am 11:27 AM

Docker画像を作成する手順:ビルド命令を含むDockerFileを書きます。 Docker Buildコマンドを使用して、ターミナルで画像を作成します。画像にタグを付け、Dockerタグコマンドを使用して名前とタグを割り当てます。

nginxサーバーを開始する方法 nginxサーバーを開始する方法 Apr 14, 2025 pm 12:27 PM

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

Nginxが起動されているかどうかを確認する方法は? Nginxが起動されているかどうかを確認する方法は? Apr 14, 2025 pm 12:48 PM

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

Linuxでnginxを開始する方法 Linuxでnginxを開始する方法 Apr 14, 2025 pm 12:51 PM

Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

nginx403を解く方法 nginx403を解く方法 Apr 14, 2025 am 10:33 AM

Nginx 403禁止エラーを修正する方法は?ファイルまたはディレクトリの許可を確認します。 2。HTACCESSファイルを確認します。 3. nginx構成ファイルを確認します。 4。nginxを再起動します。他の考えられる原因には、ファイアウォールルール、Selinux設定、またはアプリケーションの問題が含まれます。

See all articles