1、目录索引(autoindex)
ngx_http_autoindex_module模块处理以斜杠字符(‘/‘)结尾的请求,并生成目录列表。
当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给模块。
#启用或禁用目录列表输出,on开启,off关闭。
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
#指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大概单位。
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location
#指定目录列表中的时间是应以本地时区还是UTC输出。on本地时区,off UTC时间。
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
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主机