1、目录索引模块:ngx_http_autoindex_module
开启目录索引
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
off以可读的格式显示大小信息
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location
显示文件最后修改的时间,默认是上传的时间。
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location
2、访问限制模块:ngx_http_access_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
示例:依次按顺序检索,如果需要制定的规则较多,推荐使用ngx_http_geo模块。
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
3、基本认证模块:ngx_http_auth_basic_module
使用http基本身份验证协议启用用户名和密码的验证
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
示例:
location / {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
密码格式如下,需要通过htpasswd命令生成。
[root@web01 ~]# htpasswd -c /etc/nginx/auth_basic test //-c生成新的密码文件
New password:
Re-type new password:
Adding password for user test
[root@web01 ~]# cat /etc/nginx/auth_basic
test:$apr1$VP/ZpG3y$mNFIQ2Pib3WhI7diMs3ak0
[root@web01 ~]# htpasswd /etc/nginx/auth_basic test2 //添加认证用户,不用加-c,加了-c会覆盖原来的用户
New password:
Re-type new password:
Adding password for user test2
[root@web01 ~]# cat /etc/nginx/auth_basic
test:$apr1$VP/ZpG3y$mNFIQ2Pib3WhI7diMs3ak0
test2:$apr1$TNo4tq2S$djvomoR4uLzo2xGXsdVDn0
4、状态模块:ngx_http_stub_status_module
Syntax: stub_status;
Default: —
Context: server, location
示例:
location = /status {
stub_status;
}
输出信息含义:
Active connections: 1
server accepts handled requests
1 1 7
Reading: 0 Writing: 1 Waiting: 0
------------------------------------
Active connections 当前活跃连接数,包括Waiting等待连接数。
accepts 已接收的总TCP连接数量。
handled 已处理的TCP连接数量。
requests 当前总http请求数量。
Reading 当前正在读取的请求头的连接数量。
Writing 当前正在响应的请求头的连接数量。
Waiting 当前等待请求的空闲客户端连接数
5、连接限制模块:ngx_http_limit_conn_module
设置共享内存区域,区域将保留各种值的状态。key可以包含文本,变量及其组合。格式是针对限制的对象、内存空间的名字、内存空间大小。$binary_remote_addr是限制每个客户端IP与服务器的连接数。
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
设置共享内存区域和最大允许连接数。当超过此限制时,服务器将返回503状态码。
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
示例:使用limit_conn指令使用前,需要在http层定义limit_conn_zone。
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
//定义了一个10m内存空间,名称叫addr,针对的是来源的IP。
...
server {
...
location /download/ {
limit_conn addr 1; //指定一个会话的最大同时连接数,超过返回503。
}
}
}
6、请求限制模块:ngx_http_limit_req_module
解释同上limit_conn_zone,不过它限制的是来自单个IP地址的请求的处理速率。
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http
设置共享内存区域和请求的最大并发数。如果请求速率超过为区域配置的速率,则会延迟其处理,以便以定义的速率处理请求。过多的请求将被延迟,直到其数量超过最大突发大小为止,在这种情况下,该请求将会终止返回503状态码。默认情况下,最大并发数等于零。
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
示例:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
//定义了一个10m内存空间,名称叫one,平均每秒最多允许不超过1个请求,针对来源ip。
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
}
}
如果不需要在限制请求时延迟过多的请求,则应使用参数nodelay,则延迟的请求将会被丢弃。即如果你的网页完全显示出来需要6个请求,不配nodelay,那就是一秒处理一个,处理到第五个请求停止,总共用时5秒钟,丢失一个请求。如果配置了参数nodelay,则只处理第一个请求,其余请求全部丢弃。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5 nodelay; //平均每秒最多处理1个请求,并且并发不超过5个请求,对于请求不延迟处理直接丢弃。
}
}