官方文档:http://nginx.org/en/docs/
一、索引目录(ngx_http_autoindex_module)
nginx默认不允许使用索引目录,自定义配置文件/etc/nginx/conf.d/pm.conf
二、状态监控(ngx_http_stub_status_module)
在/etc/nginx/conf.d/pm.conf的server区块中添加
注:因为这个页面是不对外开放的,只是运维人员便于监控,所以没必要记录日志。
访问网址 http://192.168.1.7/pm_stub_status
此时刷新页面,requests数会增加,因为TCP是长连接,只有在超时后刷新才会再次尝试连接,在/etc/nginx/nginx.conf中
代表连接65s后超时,如果将该值设置为0,再刷新页面时,每次刷新上述3个值都会增加(在成功连接的情况下)
注:如果使用restart重启服务,上述3个连接数都会被重置,而使用reload则不会。
三、访问控制
基于IP的访问控制:ngx_http_access_module
控制顺序:从上向下,匹配成功即停止。
企业思路:1.先写允许的ip,最后拒绝所有。2.先写拒绝的ip,最后允许所有
如监控的页面,我们只希望内网或某个ip能访问,可以这么写。
基于用户登陆认证的访问控制:ngx_http_auth_basic_module
首先配置用户名密码文件
配置需要登陆的页面(/etc/nginx/conf.d/pm.conf)
重启服务访问页面:
四、访问限制(ngx_http_limit_conn_module)
通过对同一个ip的连接数,并发数进行限制,来抵御大流量的恶意攻击访问。
模块可以根据定义的key来限制每个键值的连接数,如同一IP的连接数。
HTTP请求建立在一次TCP连接上,一次TCP连接至少会产生一次HTTP请求。(三次握手-->http请求和响应-->四次挥手)
限制ip连接数
变量:
$binary_remote_addr 长度固定为4字节,正好能保存一个ip地址的长度,32位
$remote_addr 长度为7~15字节
限制请求频率(ngx_http_limit_req_module)
limit_req zone=req_pm burst=3 nodelay; 每秒超出的请求数作延迟处理,若再超出burst的值,则返回503
使用ab工具进行压力测试(需先安装httpd-tools)
ab -n 20 -c 10 http://192.168.1.7/index.html
意思是有10个连接同时每次进行20次请求
五、日志配置(ngx_http_log_module)
access_log代表成功访问的日志 error_log代表出现错误的日志
log_format用于设置日志的格式,main为其格式名
$remote_addr
记录客户端IP地址$remote_user
记录客户端用户名称$request
记录请求的URL和HTTP协议(GET,POST,DEL,等)$status
记录请求状态$body_bytes_sent
发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。$bytes_sent
发送给客户端的总字节数。$connection
连接的序列号。$connection_requests
当前通过一个连接获得的请求数量。$msec
日志写入时间。单位为秒,精度是毫秒。$pipe
如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。$http_referer
记录从哪个页面链接访问过来的$http_user_agent
记录客户端浏览器相关信息$request_length
请求的长度(包括请求行,请求头和请求正文)。$request_time
请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。$time_iso8601 ISO8601
标准格式下的本地时间。$time_local
通用日志格式下的本地时间。$http_x_forwarded_for
若客户端使用代理,会记录原始ip地址
access_log off; 代表关闭日志记录
error_log 路径 级别
debug:调试级别,记录的信息最多;
info:普通级别;
notice:可能需要注意的信息;
warn:警告消息;
error:错误消息;
crit:严重错误消息;
六、虚拟站点
在一台服务器上配置多个网站,几种方式:
基于IP:不同的IP地址(基本不会用这种方式)
基于端口:相同IP,不同的端口号
基于域名:相同的IP,相同的端口,不同的域名
基于域名就是将上图中,listen后面都改为80,server_name后面改为对应的域名,并在本地hosts文件中添加DNS解析,如
192.168.1.7 www.pm.com bbs.pm.com blog.pm.com
注:不同的站点请设置独立日志,混在一起无法区分。即在各自的server区块内设置access_log
七、Location
location用于控制网站路径。
语法规则:location [=|~|~*|^~] /uri/ { … }
匹配符 匹配规则 优先级
= 精确匹配 1
没有匹配符的精确匹配 2
^~ 以某个字符串开头 3
~ 区分大小写的正则匹配 4
~* 不区分大小写的正则匹配 5
!~ 区分大小写的非正则匹配 6
!~* 不区分大小写的非正则匹配 7
/ 通用匹配,任何请求都会匹配到 8
location = /abc {
……
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
如下是错的:
http://baidu.com/abc/
http://baidu.com/abcde
location ~ .avi$ {
deny all;
}
表示凡是以 .avi 结尾的路径都不允许访问。