连接数监控
官网文档
http://nginx.org/en/docs/http/ngx_http_stub_status_module.html 模块介绍 该ngx_http_stub_status_module模块提供对基本状态信息的访问。 默认情况下不构建此模块,应使用 --with-http_stub_status_module 配置参数启用它。
Nginx状态信息(status)介绍 Nginx软件在编译时又一个with-http_stub_status_module模块,这个模块功能是记录Nginx的基本访问状态信息,对于想了解nginx的状态以及监控nginx非常有帮助。
让使用者了解Nginx的工作状态。
要想使用状态模块,在编译时必须增加--with-http_stub_status_module参数。
1.参数解释
Active connections 当前活动客户端连接数,包括Waiting连接数。 accepts 接受的客户端连接总数。 handled 处理的连接总数。 accepts 通常,除非已达到某些资源限制(例如, worker_connections限制) ,否则该参数值相同。 requests 客户端请求的总数。 Reading nginx 正在读取请求标头的当前连接数。 Writing nginx 将响应写回客户端的当前连接数。 Waiting 当前等待请求的空闲客户端连接数。 # 注意 一个tcp连接,可以发起多个http请求 可以通过修改保持连接参数修改 keepalive_timeout 0; 表示关闭长连接
2.看下你的nginx支持这个模块吗
nginx -V
3.配置文件
cat >/etc/nginx/conf.d/status.conf<<EOF server{ listen 9999; server_name localhost; stub_status on; access_log off; } EOF 重启 [root@web-9 /var/log/nginx]#systemctl restart nginx
4.访问状态
基于IP的访问限制
模块
http://nginx.org/en/docs/http/ngx_http_access_module.html
1.配置语法
句法: allow address | CIDR | unix: | all; 默认: — 语境: http, server, location,limit_except 允许访问指定的网络或地址。如果指定了特殊值unix:(1.5.1),则允许访问所有 UNIX 域套接字。 句法: deny address | CIDR | unix: | all; 默认: — 语境: http, server, location,limit_except 拒绝对指定网络或地址的访问。如果指定了特殊值unix:(1.5.1),则拒绝所有 UNIX 域套接字的访问。
allow和deny是自上而下的加载顺序
2.拒绝windows访问www域名
[root@web-9 /etc/nginx/conf.d]#cat www.yuchaoit.conf server { listen 80; server_name www.yuchaoit.cn; charset utf-8; access_log /var/log/nginx/www.yuchaoit.log; error_log /var/log/nginx/error.www.yuchaoit.log; error_page 404 /404.html; location / { root /usr/share/nginx/html/game; index index.html index.htm; deny 10.0.0.1; allow all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
但是虚拟机,走内网环境是可以通的。
3.只允许windows访问,其他人拒绝
注意allow和deny的加载顺序是,自上而下加载;
[root@web-9 /etc/nginx/conf.d]#cat www.yuchaoit.conf server { listen 80; server_name www.yuchaoit.cn; charset utf-8; access_log /var/log/nginx/www.yuchaoit.log; error_log /var/log/nginx/error.www.yuchaoit.log; error_page 404 /404.html; location / { root /usr/share/nginx/html/game; index index.html index.htm; allow 10.0.0.1; deny all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
windows可访问
linux不可访问
第一题 限制只允许10.0.0.0~10.0.0.255范围的IP访问(禁止其他网段的访问) 创建虚拟主机,完成该功能 [root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf server { listen 22334; server_name _; location / { allow 10.0.0.0/24; deny all; root /www/deny-allow; index index.html; } } 创建测试数据,查看访问情况 [root@web-8 /etc/nginx/conf.d]#mkdir -p /www/deny-allow [root@web-8 /etc/nginx/conf.d]# [root@web-8 /etc/nginx/conf.d]# [root@web-8 /etc/nginx/conf.d]#echo 'I am web-8 , test deny and allow !!!!!!!!' > /www/deny-allow/index.html [root@web-8 /etc/nginx/conf.d]#systemctl restart nginx [root@web-8 /etc/nginx/conf.d]# [root@web-8 /etc/nginx/conf.d]# [root@web-8 /etc/nginx/conf.d]#netstat -tunlp|grep 22334 tcp 0 0 0.0.0.0:22334 0.0.0.0:* LISTEN 7402/nginx: master 1. 用win去访问,可以吗? 可以的 http://10.0.0.8:22334/ 2. 用61机器去访问, # 网卡的流量,网段是对应起来的 eth0 10.0.0.61 eth1 172.16.1.61 curl 10.0.0.8:22334 # 从61机器的10.0.0.61发出 curl 172.16.1.8:22334 # 从61机器的172.16.1.61发出
只写一个allow的话,等于没有任何意义,必须做好deny限制,才有实际意义。
- 限制只允许172.16.1.0 ~ 172.16.1.255 范围的IP访问,禁止其他任意的地址访问。 [root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf server { listen 22334; server_name _; location / { #allow 10.0.0.0/24; allow 172.16.1.0/24; deny all; # 拒绝客户端访问该网页根目录下的资源,返回403权限不足 root /www/deny-allow; index index.html; } } 你发现,处于同一个内网环境下的 ,有172网段的机器是通的, 比如win这回访问可以通码? 可以 1 不可以 2
- 限制只允许windows访问(禁止其他机器访问,比如任意的 10.0.0.61 任意的172.16.1.52) [root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf server { listen 22334; server_name _; location / { # allow 10.0.0.0/24; # allow 172.16.1.0/24; allow 10.0.0.1; deny all; # 拒绝客户端访问该网页根目录下的资源,返回403权限不足 root /www/deny-allow; index index.html; } } # 看懂 3 不懂 4 # 待会试试,用不同网段的客户端ip,访问,查看权限 # 测试几个客户端 10.0.0.1 通 ,只有这一个ip地址是通的. 10.0.0.61 不通 172.16.1.52 不通
- 限制拒绝10.0.0.0~10.0.0.255范围的IP访问(得允许其他网段访问) (这个ip限制规则,自上而下的匹配,匹配到规则后,就不会继续向后匹配了) 此时只能通过内网的172网卡去访问这个机器了 # 配置如下 [root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf server { listen 22334; server_name _; location / { deny 10.0.0.0/24; root /www/deny-allow; index index.html; } } # 通过如下这几个客户端试试,先用10网段的试试 发现10网段全部被拒绝 发现172网段是允许被访问的
基于ip,判断出目标机器是windos吗?
通过目标机器的user-agent去判断,判断的浏览器客户端,是windows等情况,拒绝
限制只拒绝windows访问。其他人都允许访问 [root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf server { listen 22334; server_name _; location / { deny 10.0.0.1; root /www/deny-allow; index index.html; } } 10.0.0.1 只有它不能访问 测试
window访问 172.16.1.8:22334 能通 扣 1,不能扣 2 windows(vmnet8 10.0.0.1,) 172网段(vmware提供的LAN网段,纯局域网,)
基于用户认证的访问限制
有时候,我们一些站点内容想要进行授权查看,只能输入账号密码之后才能访问,例如一些重要的内网平台,CRM,CMDB,企业内部WIKI等等。
1.语法
https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html 句法: auth_basic string | off; 默认: auth_basic 关闭; 语境: http, server, location,limit_except 启用使用“HTTP 基本身份验证”协议验证用户名和密码。 指定的参数用作realm. 参数值可以包含变量(1.3.10、1.2.7)。 特殊值off取消了auth_basic从先前配置级别继承的指令的效果。 句法: auth_basic_user_file file; 默认: — 语境: http, server, location,limit_except
2.创建密码文件
htpasswd是Apache密码生成工具,Nginx支持auth_basic认证,因此我门可以将生成的密码用于Nginx中,输入一行命令即可安装: yum -y install httpd-tools 参数 -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容. -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互 #创建认证文件,htpasswd -bc .access username password #在当前目录生成.access文件,用户名username,密码:password,默认采用MD5加密方式。 具体操作 [root@web-9 ~]#htpasswd -b -c /etc/nginx/auth_passwd yuchao01 yuchao666 Adding password for user yuchao01
3.nginx调用密码文件
[root@web-9 ~]#cat /etc/nginx/conf.d/www.yuchaoit.conf server { listen 80; server_name www.yuchaoit.cn; charset utf-8; access_log /var/log/nginx/www.yuchaoit.log; error_log /var/log/nginx/error.www.yuchaoit.log; error_page 404 /404.html; location / { root /usr/share/nginx/html/game; index index.html index.htm; auth_basic "yuchaoit.cn welcomes you"; auth_basic_user_file /etc/nginx/auth_passwd; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
4.访问测试
只有www.yuchaoit.cn站点被加了密码。
其他未设置认证的可以直接访问。
nginx请求限制
1.官网模块
https://nginx.org/en/docs/http/ngx_http_limit_req_module.html
1.知道用法即可,生产下的限流,更多的是后端框架中限制,nginx这里一般不做,可能导致请求出错。知道用法,以后看到企业里在用,会维护即可。
2.以及理解限流的概念。
2.配置语法
限速规则语法 https://docshome.gitbook.io/nginx-docs/he-xin-gong-neng/http/ngx_http_limit_req_module ngx_http_limit_req_module 模块(0.7.21)用于限制每个已定义 key 的请求处理速率,特别是来自单个 IP 地址请求的处理速率。限制机制采用了 leaky bucket (漏桶算法)方法完成。
3.参数示例
# 1.定义一个限速规则 # 定义限速区域,保持在10兆字节的区域one,该区域的平均处理请求每秒不能超过1个。 # $binary_remote_addr 变量的大小始终为 4 个字节,在64位机器上始终占用64字节 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s; 参数解释 limit_req_zone # 引用限速模块 binary_remote_addr # 判定条件,远程的客户端IP zone # 定义限速区域名称,内存大小 rate # 限速规则,1秒只能1个请求 # 2.引用限速规则 limit_req zone=two burst=5; limit_req # 引用哪一个限速区域 burst=5 # 令牌桶、平均每秒不超过 1 个请求,并且突发不超过5个请求。 nodelay # 如果不希望排队堆积的请求过多,可以用这个参数。
4.实际用法
限速规则是1秒一个请求 提供3个vip特殊名额 [root@web-9 /etc/nginx/conf.d]#cat www.yuchaoit.conf limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name www.yuchaoit.cn; charset utf-8; access_log /var/log/nginx/www.yuchaoit.log; error_log /var/log/nginx/error.www.yuchaoit.log; error_page 404 /404.html; limit_req zone=one burst=3 nodelay; location / { root /usr/share/nginx/html/game; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
5.访问测试
正常限速内
[root@master-61 ~]#for i in {1..10};do curl -I www.yuchaoit.cn;sleep 1;done
超速访问情况
[root@master-61 ~]#for i in {1..20};do curl -I www.yuchaoit.cn;sleep 0.5 ;done
nodelay参数作用
用法1,不加nodelay参数
这个nginx的意思是,该虚拟主机,限制客户端 1秒内只能有5个请求,其他请求全部延迟排队。这个参数有麻烦,别用,可能导致出现大问题。
[root@web-8 ~]#cat /etc/nginx/conf.d/limit_req.conf limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s; server { listen 33555; server_name _; charset utf-8; access_log /var/log/nginx/limit_req.log; limit_req zone=one burst=3 ; location / { root /www/limit-req; index index.html index.htm; } }
用法2,添加nodelay参数
请求不排队,限速是几个就几个,超过就直接503拒绝,以及设置了burst特殊请求。
标签:www,限制,log,访问,nginx,html,conf,root From: https://www.cnblogs.com/sxy-blog/p/17463259.html