1、目录索引(autoindex)

ngx_http_autoindex_module模块处理以斜杠字符(‘/‘)结尾的请求,并生成目录列表。
当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给模块。

  1. #启用或禁用目录列表输出,on开启,off关闭。
  2. Syntax: autoindex on | off;
  3. Default: autoindex off;
  4. Context: http, server, location
  5. #指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大概单位。
  6. Syntax: autoindex_exact_size on | off;
  7. Default: autoindex_exact_size on;
  8. Context: http, server, location
  9. #指定目录列表中的时间是应以本地时区还是UTC输出。on本地时区,off UTC时间。
  10. Syntax: autoindex_localtime on | off;
  11. Default: autoindex_localtime off;
  12. Context: http, server, location

2、状态监控(stub_status)

ngx_http_stub_status_module 模块提供对基本状态信息的访问。
默认情况下不构建此模块,应使用—with-http_stub_status_module 配置参数启用它 。

Syntax: stub_status;
Default: —
Context: server, location


    location /nginx_status {
        stub_status;
    }

状态信息:

[root@hc11 nginx]# curl 127.0.0.1/nginx_status
Active connections: 1 
server accepts handled requests
 24 24 26 
Reading: 0 Writing: 1 Waiting: 0 

Active connections  # 当前活动客户端连接数,包括Waiting等待连接数。
accepts             # 已接受总的TCP连接数。
handled             # 已处理总的TCP连接数。
requests            # 客户端总的http请求数。
Reading             # 当前nginx读取请求头的连接数。
Writing             # 当前nginx将响应写回客户端的连接数。
Waiting             # 当前等待请求的空闲客户端连接数。
# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout  0;   # 类似于关闭长连接
keepalive_timeout  65;  # 65s没有活动则断开连接

3、访问控制(http_access)

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


location /nginx_status {
  stub_status;
  #deny 192.168.1.5/32; #拒绝某个ip访问其他的都可以访问
  #allow all;

  allow 127.0.0.1; #监控nginx状态时,仅允许该服务器的回环地址访问
  deny all;
 }

4、用户认证(auth_basic)

ngx_http_auth_basic_module 模块允许使用HTTP基本身份验证,验证用户名和密码来限制对资源的访问。

#使用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 /img {
      auth_basic "User Auth";
      auth_basic_user_file /usr/local/nginx/conf/auth.passwd;
}

auth_basic # 设置名字
auth_basic_user_file # 用户认证文件放置路径

# 生成认证文件:
yum install httpd-tools -y
htpasswd -c /usr/local/nginx/conf/auth.passwd admin
输入两次密码确定。
# 重启服务后,访问验证

htpasswd(选项)(参数)
选项
-c:创建一个加密文件;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。
# 添加用户名及密码:
htpasswd -b /usr/local/nginx/conf/auth.passwd admin admin123

5、访问限制(limit_conn)

经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,从而影响业务,针对这种情况我们可以考虑对同一个ip的连接数,请求数、进行限制。
ngx_http_limit_conn_module 模块用于限制定义key的连接数,特别是来自单个IP地址的连接数。
但并非所有连接都被计算在内,仅当连接已经读取了整个请求头时才计算连接。

Syntax:  limit_conn_zone key zone=name:size;
Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location

设置共享内存区域和给定键值的最大允许连接数。超过此限制时,服务器将返回错误以回复请求

# http标签段定义连接限制
http {
    # 设置了名为“conn_zone”的存储区,大小为10兆字节,允许1秒钟不超过10个请求
    limit_conn_zone $binary_remote_addr zone=conn_zone:10m rate=10r/s; 

server {
    # 同一时刻只允许一个客户端连接,最大并发连接数为1
    limit_conn conn_zone 1;
    # 服务提供的总连接数不得超过100,超过请求的会被拒绝
    limit_conn perserver 100;
    # 请求超过10r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503
    limit_req zone=conn_zone burst=3 nodelay;
    location / {
        root /code;
        index index.html;
    }
}

ngx_http_limit_req_module 模块用于限制定义key 请求的处理速率,特别单一的IP地址的请求的处理速率。

#模块名ngx_http_limit_req_module
Syntax:  limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http
Syntax:  limit_conn zone number [burst=number] [nodelay];
Default: —
Context: http, server, location

6、防盗链(valid_referers)

盗链的含义是网站内容本身不在自己公司的服务器上,而通过技术手段, 直接调用其他公司的服务器网站数据,而向最终用户提供此内容

Syntax: valid_referers none | blocked | server_names |
string ...;
Default: —
Context: server, location


location ~* \.(gif|jpg|png|swf|flv)$ {
    valid_referers none blocked hc.net *.hc.net;
    root /usr/share/nginx/html;
    if ($invalid_referer) {
        return 403;
    }
}
# valid_referers 表示合法的referers设置
# none: 表示没有referers,直接通过浏览器或者其他工具访问。
# blocked: 表示有referers,但是被代理服务器或者防火墙隐藏;
# lutixia.net: 表示通过hc.net访问的referers;
# *.hc.net: 表示通过*.hc.net访问的referers,*表示任意host主机