nginx常用模块
程序员文章站
2023-04-04 19:03:58
[toc] nginx常用模块 1.目录索引模块 nginx 默认是不允许列出整个目录浏览下载 配置示例 2.nginx状态模块 ngx_http_stub_status_module`模块提供对基本状态信息的访问。 默认情况下不构建此模块,应使用 配置参数启用它 访问浏览器 nginx访问控制 基 ......
目录
nginx常用模块
1.目录索引模块
ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。 当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块。
- nginx 默认是不允许列出整个目录浏览下载
syntax: autoindex on | off; default: autoindex off; context: http, server, location # autoindex常用参数 autoindex_exact_size off; 默认为on, 显示出文件的确切大小,单位是bytes。 修改为off,显示出文件的大概大小,单位是kb或者mb或者gb。 autoindex_localtime on; 默认为off,显示的文件时间为gmt时间。 修改为on, 显示的文件时间为文件的服务器时间。 charset utf-8,gbk; 默认中文目录乱码,添加上解决乱码。
- 配置示例
server { listen 10.0.0.8:80; server_name www.qiqi.com; access_log /var/log/nginx/www.qiqi.com.access.log main; charset utf-8,gbk; location / { root /naonao/h5_games; index index.html; } location /download { alias /dir; autoindex on; autoindex_exact_size on; autoindex_localtime on; } location /favicon.ico { access_log off; return 200; } location /js/common.js { access_log /var/log/nginx/js.log main; } }
2.nginx状态模块
ngx_http_stub_status_module模块提供对基本状态信息的访问。 默认情况下不构建此模块,应使用
--with-http_stub_status_module`配置参数启用它
syntax: stub_status; default: — context: server, location
server { listen 80; server_name www.qiqi.com; access_log off; location /nginx_status { stub_status; } }
访问浏览器
http://www.qiqi.com/nginx_status
active connections: 2 server accepts handled requests 373 373 695 reading: 0 writing: 1 waiting: 1 active connections # 当前活动的连接数 accepts # 当前的总连接数tcp handled # 成功的连接数tcp requests # 总的http请求数 reading # 请求 writing # 响应 waiting # 等待的请求数,开启了keepalive # 注意, 一次tcp的连接,可以发起多次http的请求, 如下参数可配置进行验证 keepalive_timeout 0; # 类似于关闭长连接 keepalive_timeout 65; # 65s没有活动则断开连接
nginx访问控制
基于ip的访问控制 http_access_module
基于用户登陆认证 http_auth_basic_module
#允许配置语法 syntax: allow address | cidr | unix: | all; default: — context: http, server, location, limit_except #拒绝配置语法 syntax: deny address | cidr | unix: | all; default: — context: http, server, location, limit_except
- 访问控制配置示例,拒绝指定的ip,其他全部允许
server { listen 80; server_name www.qiqi,com; access_log off; location /nginx_status { stub_status; deny 10.0.0.1; allow all; } }
- 访问控制配置示例,只允许谁能访问,其他全部拒绝
server { listen 80; server_name www.qiqi.com; access_log off; location /nginx_status { stub_status; allow 10.0.0.0/24; allow 127.0.0.1; deny all; } }
登录认证模块
- 基于用户登录认证配置语法
#访问提示字符串 syntax: auth_basic string| off; default: auth_basic off; context: http, server, location, limit_except #账户密码文件 syntax: auth_basic_user_file file; default: - context: http, server, location, limit_except
- 基于用户登录认证配置实践
#1.需要安装httpd-tools,该包中携带了htpasswd命令 [root@web01 ~]# yum install httpd-tools #2.创建新的密码文件, -c创建新文件 -b允许命令行输入密码 [root@web01 ~]# htpasswd -b -c /etc/nginx/auth_conf zls zls #文件路径随意,验证时登录域名验证 server { listen 10.0.0.8:80; server_name www.qiqi.com; access_log /var/log/nginx/www.qiqi.com.access.log main; charset utf-8,gbk; location /nginx_status{ stub_status; stub_status; auth_basic "请输入密码"; auth_basic_user_file auth_conf; } }
访问限制
在企业中经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问, 会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,请求数、进行限制。
ngx_http_limit_conn_module
模块可以根据定义的key
来限制每个键值的连接数,如同一个ip来源的连接数。
limit_conn_module
连接频率限制
limit_req_module
请求频率限制
连接限制
vim /etc/nginx/nginx.conf #主配置文件 http { limit_conn_zone $remote_addr zone=suibian:10m; }
限制请求数量
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /search/ { limit_req zone=one burst=5 nodelay; limit_req_status 412; error_page 412 /xxx/err.html } }
- 使用
ab
工具进行压力测试
[root@oldboyedu ~]# yum install -y httpd-tools [root@oldboyedu ~]# ab -n 20 -c 2 http://127.0.0.1/index.html
- nginx日志结果
2018/10/24 07:38:53 [error] 81020#0: *8 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.driverzeng.com, request: "get /index.html http/1.0", host: "10.0.0.10" 2018/10/24 07:38:53 [error] 81020#0: *9 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.driverzeng.com, request: "get /index.html http/1.0", host: "10.0.0.10" 2018/10/24 07:38:53 [error] 81020#0: *10 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.driverzeng.com, request: "get /index.html http/1.0", host: "10.0.0.10"
nginx请求限制重定向
在nginx请求限制的过程中,我们可以自定义一个返回值,也就是错误页面的状态码。
默认情况下是503
server { listen 80; server_name module.driverzeng.com; charset utf-8,gbk; location / { root /code; index index.html index.htm; limit_req zone=req_zone burst=3 nodelay; limit_req_status 478 #重定错误页面 error_page 412 /err.html; #通常避免与过载冲突,定义412 } } vim /code/err.html <img style='width:100%;height:100%;' src=https://www.driverzeng.com/zenglaoshi/478_page.png> #h5图片编写格式
nginx location 优先级
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 3 |
!~ | 区分大小写不匹配的正则 | 5 |
!~* | 不区分大小写不匹配的正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 |
配置网站测试优先级
root@nginx conf.d]# cat testserver.conf server { listen 80; server_name www.driverzeng.com; location / { default_type text/html; return 200 "location /"; } location =/ { default_type text/html; return 200 "location =/"; } location ~ / { default_type text/html; return 200 "location ~/"; } # location ^~ / { # default_type text/html; # return 200 "location ^~"; # } }