nginx模块可分为 “官方模块 ”和 '第三方模块“。
命令nginx -V可查看nginx的编译参数,--with开头的参数就是指编译的模块部分。下面介绍部分模块及其配置:
1.--with-http_stub_status_module
作用:展现nginx客户端状态
配置语法: Syntax:stub_status;
Default:----
Context:server,location
看语法得知,此模块是配置在server或location下,如:
location /mystatus{
stub_status;
}
配置完后记得检查语法是否正确: nginx -tc /etc/nginx/nginx.conf
若正确则重载该服务: nginx -s reload -c /etc/nginx/nginx.conf 或 systemctl reload nginx
完成后即可在浏览器中输入 127.0.0.1/mystatus来查看nginx客户端状态:
active connections 表示nginx当前活跃连接数
server accepts handled requests
xxx xxx xxxx (第一个表示nginx接收的握手的次数,第二个表示nginx处理的连接数,第三个表示总的请求数。正常情况第一个数等于第二个数,即没有丢失连接)
Reading: x(正在读的个数) Writing: x(正在往nginx写的个数) Waiting: x(nginx在开启keepalive时,客户端和服务端之间正在空闲等待的连接数)
2.--with-http_random_index_module
作用:目录中选择一个随机主页,用户每次进入看到的可能都是不同的主页
配置语法: Syntax:random_index on|off;
Default:random_index off;
Context:location
例子:
location /{
root /usr/share/nginx/html 默认 (实际生产环境则改成自定义的存放若干主页html的目录)
random_index on;
.....................
}
注意:隐藏的html文件无法被选择
3.--with-http_sub_module
作用:Http内容替换
配置语法有多个,这里列出常用的几个:
(1)Syntax:sub_filter string replacement; string是被替换的内容(html代码) replacement是替换内容(html代码)
(2)
Syntax:sub_filter_last_modified on|off; last_modified是响应头信息的一部分,主要应用于缓存,显示http响应内容上次修改的时间
(3)Syntax:sub_filter_once on|off; on则只匹配替换内容的第一个,off则匹配所有
Default::sub_filter_once on
4.请求限制模块
可通过下面两个模块任一个实现:
TCP连接频率限制-limit_conn_module
配置语法:
Syntax:limit_conn_zone key zone=name:size
limit_conn_zone是操作系统中保存连接状态的空间 key是限制条件(比如客户端IP)
Context:http name是空间的名字,size是分配的空间大小
Syntax:limit_conn zone number zone指空间的名字 ,number是同一时间允许的连接个数
Default:-----
Http请求频率限制-limit_req_module
Syntax:limit_req_zone key zone=name:size rate=x r/s; rate即key指定的客户端的限制请求频率r/s
Default:-----
Default:-----
配置示例如下图:
http下
server location下
5.访问控制模块
5.1基于IP的访问控制-http_access_module
作用:允许或拒绝某些IP访问
配置语法:
Syntax:allow address | CIDR | unix:|all;
配置示例: location ~ ^/XXX.html {
root 自定义存放页面的目录
deny 234.12.122.34; 拒绝此IP访问以XXX.html为后缀的域名,会报403错误
allow all;
index index.html index.htm;
}
局限性:假如客户端不是直接与服务端连接,而是中间还隔着代理的话,那么访问控制将无效,因为客户端是先访问代理,代理再访问服务端,而http_access_module 是基于变量remote_addr来识别客户端IP的,但是remote_addr存储的不是客户端的IP而是代理的IP,因此访问控制无效。那么有什么方法呢?
(1)采用别的Http头信息控制访问,如:http_x_forwarded_for
x_forwarded_for变量是http头信息中的一个变量,它记录的内容=ClientIP+Proxy(1)IP+Proxy(2)IP.................
(2)结合geo模块
(3)通过Http自定义变量进行传递
5.2基于用户的信任登录-http_auth_basic_module
作用:提供登录认证界面控制用户访问
配置语法: Syntax: auth_basic string | off;string是认证界面显示的提示信息
这方法有其局限性:需要把用户信息存到一个文件里,效率低下,且不好管理因为有着多套用户名密码。