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

NGINX 空格 nginx index on_linuxserver_name是限制同一server最大并发数。

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;
        }
    }
}

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个请求,对于请求不延迟处理直接丢弃。
    }
}