Rumah > Operasi dan penyelenggaraan > Nginx > Bagaimana untuk melaksanakan kawalan akses dan sekatan sambungan berdasarkan Nginx

Bagaimana untuk melaksanakan kawalan akses dan sekatan sambungan berdasarkan Nginx

WBOY
Lepaskan: 2023-05-14 18:46:20
ke hadapan
1579 orang telah melayarinya

1. Sintaks konfigurasi lalai

Bagaimana untuk melaksanakan kawalan akses dan sekatan sambungan berdasarkan Nginx

nginx.conf sebagai fail konfigurasi utama

serta /etc/nginx/conf . Selepas membaca d/*.conf, .conf direktori juga akan dibaca dalam

1.1 Tahap global dan perkhidmatan

user 设置使用用户
worker_processes 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
error_log nginx的错误日志
pid nginx服务启动时候pid
Salin selepas log masuk

modul acara 1.2 untuk acara

rreee

1.3 pelayan

worker_connections一个进程允许处理的最大连接数
use定义使用的内核模型
Salin selepas log masuk

2 http

Bagaimana untuk melaksanakan kawalan akses dan sekatan sambungan berdasarkan Nginx

root 首页的路径
index 首页默认访问哪个页面
error_page 500 502 503 504 /50x.html 错误页面 前面的500是**`http状态码`**
systemctl restart nginx.service 重启nginx
systemctl reload nginx.service 不关闭服务柔和地重启
Salin selepas log masuk

3 jenis: error.log dan access.log

curl-v http://www.baidu.com >/dev/null #-v 同时显示状态码等信息
nginx -v #显示nginx版本及配置文件等信息
Salin selepas log masuk

log_format: Menetapkan format rakaman log dan mentakrifkan gaya log direkodkan kepada error.log dan access.log Konfigurasi log_format boleh sahaja Dikonfigurasikan dalam modul http.

log_akses dikonfigurasikan dalam http.

4. Pembolehubah

Bagaimana untuk melaksanakan kawalan akses dan sekatan sambungan berdasarkan NginxHad sambungan_module_conn

module_sambungan: Had kekerapan sambungan TCP, satu sambungan TCP boleh mewujudkan berbilang permintaan http.

Sintaks konfigurasi:

limit_limit_conn_zone akan mengisytiharkan ruang
untuk merekod status sambungan bagi mengehadkan nombor.

limit_conn_module语法范围说明
limit_conn_zone 标识 zone=空间名:空间大小;http用于声明一个存储空间
limit_conn 空间名 并发限制数;http、server或location用于限制某个存储空间的并发数量
limit_conn_log_level 日志等级;http、server或location当达到最大限制连接数后, 记录日志的等级
limit_conn_status 状态码;http、server或location当超过限制后,返回的响应状态码,默认是503
ialah ruang untuk menyimpan status sambungan, disimpan sebagai pasangan nilai kunci, biasanya menggunakan alamat klien zone sebagai

untuk mengenal pasti setiap sambungan. zoneApabila ruang $binary_remote_addr kehabisan, pelayan akan mengembalikan ralat key untuk semua permintaan seterusnya.
zone503(service temporarily unavailable)Permintaan had had_req_mudule

:

Minta had kekerapan, satu

sambungan boleh mewujudkan berbilang limit_req_mudule permintaan. httpSintaks konfigurasi:tcphttp

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

burst 和 nodelay

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

http {
 limit_req_zone $binan_remote_addr zone=req_zone:1m rate=10r/s;
}
Salin selepas log masuk

情况 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;
}
Salin selepas log masuk

基于用户密码的访问控制

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
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kawalan akses dan sekatan sambungan berdasarkan Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan