• Post author:
  • Post category:nginx
  • Post comments:0评论

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

发表回复

验证码: − 5 = 1