Nginx 模块语法讲解
Nginx官方模块:
Nginx默认的模块和支持的模块
Nginx模块介绍
一.监控状态
--with-http_stub_status_module
作用:Nginx的客户端状态
语法:stub_status;
默认:无
位于环境:server,location
http_stub_status_module配置
/etc/nginx/conf.d/default.conf 中配置
location /(自定义名称){
stub_status;
}
完成后检查是否正确,使用命令:
nginx -t -c /etc/nginx/nginx.conf
没问题就重载配置服务,使用命令:
nginx -s reload -c /etc/nginx/nginx.conf
访问status 返回的内容:
Active connections:XX ———— nginx活跃的连接数
server accepts handled requests
32 32 41
第一个数表示nginx接受的握手的数
第二个数表示nginx所处理的连接数
第三个数表示总的请求数
第一个和第二个应该相等,代表没有缺失
Reading: 0 Writing: 1 Waiting: 0
Reading:读的个数
Writing:往nginx写的个数
Waiting:等待的个数
二.随机主页
--with-http_random_index_module
作用: 目录中选择一个随机主页
语法:random_index on|off;
默认:random_index off
位于环境:location
http_random_index_module 配置
location / {
root /usr/share/nginx/html; #路径,可自定义
random_index on; #开启
#index index.html index.htm;
}
这样可以在指定目录下进行随机主页的访问了!
完成后检查是否正确,使用命令:
nginx -t -c /etc/nginx/nginx.conf
没问题就重载配置服务,使用命令:
nginx -s reload -c /etc/nginx/nginx.conf
三.站点内容过滤功能模块
--with-http_sub_module
作用: HTTP内容替换
语法:sub_filter '替换内容' '替换后';
默认:无
位于环境:http,sercer,location
语法:sub_filter_once on|off;#是匹配所有还是第一个
默认:sub_filter_once on
位于环境:http,sercer,location
sub_filter 配置
location / {
root /usr/share/nginx/html; #路径,可自定义
index index.html index.htm;
sub_filter '替换内容' '替换后';
}
完成后检查是否正确,使用命令:
nginx -t -c /etc/nginx/nginx.conf
没问题就重载配置服务,使用命令:
nginx -s reload -c /etc/nginx/nginx.conf
四.Nginx的请求限制
Http协议的连接与请求
HTTP协议版本 连接关系
HTTP1.0 TCP不能复用
HTTP1.1 顺序性TCP复用
HTTP2.0 多路复用TCP复用
HTTP请求建立在一次TCP连接基础上
一次TCP请求至少产生一次HTTP请求,也可以产生多次
1.连接限制
1.连接频率限制-limit_conn_module
语法:limit_conn_zone key zone=name:size;
key:ip或者别的限制变量
name:开辟的空间的名字,调用时就是调用的这个名字
size:空间大小配置根据情况而定
默认:无
位于环境:http
语法:limit_conn zone number; #结合上面的zone进行使用
zone: 就是调用的上面的名字:name
number:限制的并发的数量,一时间只能允许number进行
默认:无
位于环境:http,server,location
2.请求限制
2.请求频率限制-limit_req_module
语法:limit_req_zone key zone=name:size rate=rate;
key:ip或者别的限制变量
name:开辟的空间的名字,调用时就是调用的这个名字
size:空间大小配置根据情况而定
rate=rate:速率,先定义好我对于这个限制的请求速率,1r/s ,每秒一个
默认:无
位于环境:http
语法:limit_req zone=name [burst=number] [nodelay]
burst:客户端超过指定速率,遗留的number放到下一秒执行,保证number,后一秒执行,延迟响应
nodelay:
默认:无
位于环境:http,server,location
我们多次的请求可以建立在一次的连接之上,对一个请求的精度限制比对一个IP的限制,更加的有效
五.
Nginx的访问控制
1.基于Ip的访问控制-http_access_module
1.http_access_module
语法:allow address|CIDR|unix:|all;
address:IP地址
CIDR:网段
nuix: : socket的方式
all:允许所有
默认:无
位于环境:http,server,location,limit_except
语法:deny address|CIDR|unix:|all; #用处:不允许 访问
address:IP地址
CIDR:网段
nuix: : socket的方式
all:允许所有
默认:无
位于环境:http,server,location,limit_except
http_access_module的局限性
如果用户不是直接和服务端连接,而是通过一层代理(NGINX,7layLSB,CDN),就会出现问题,http_access_module是
通过remote_addr 来识别IP的,通过代理,IP会识别成代理的Ip,到时候如果是针对用户IP进行限制或者操作,是没办法完成的,准确性不高。
解决方法:
方法一:采用别的HTTP头信息控制访问,如:HTTP_X_FORMWARD_FOR
方法二:结合geo模块作
方法三:通过HTTP自定义变量传递
2.基于用户的信任登录-http_auth_basic_module
语法:auth_basic string|off;
string:可作为登录提示
默认:auth_basic off;
位于环境:http,server,location,limit_except
语法:auth_basic_user_file file;
file:账号和密码的路径
默认:无
位于环境:http,server,location,limit_except
http_auth_basic_module局限性
1.用户信息依赖文件方式
2.操作管理机械,效率十分低下
解决方案:
方法一:Nginx结合LUA实现高效验证
方法二:Nginx和LDAP打通,利用Nginx-auth-ldap模块