1: 保持Nginx的升级
目前Nginx的稳定版本为1.14.0,最好升级到最新版本,官方的release note修复了很多bug,任何一款产品的生产环境都不想在bug风险下运行的。
另外,虽然安装包安装比通过源代码编译安装更容易,但后一个选项有两个优点:
1.它允许您将额外的模块添加到Nginx中(如more_header,mod_security),
2.它总是提供比安装包更新的版本,在Nginx网站上可看release note。
2.注释不用的Nginx模块
./configure --without-module1 --without-module2 --without-module3 例如: ./configure --without-http_dav_module --withouthttp_spdy_module #注意事项:配置指令是由模块提供的。确保你禁用的模块不包含你需要使用的指令!在决定禁用模块之前,应该检查Nginx文档中每个模块可用的指令列表。
3: 在Nginx配置中禁用server_tokens项
server_tokens在打开的情况下会使404页面显示Nginx的当前版本号。这样做显然不安全,因为黑客会利用此信息尝试相应Nginx版本的漏洞。
只需要在nginx.conf中http模块设置server_tokens off即可,禁用的效果是在404时不显示版本号。例如:
server { listen 192.168.1.1:80; Server_tokens off; server_name tecmintlovesnginx.com www.xxx.com; access_log /var/www/logs/xxx.access.log; error_log /var/www/logs/xxx.error.log error; root /var/www/xxx.com/public_html; index index.html index.htm; } #重启Nginx后生效:
4: 禁止非法的HTTP User Agents
User Agent是HTTP协议中对浏览器的一种标识,禁止非法的User Agent可以阻止爬虫和扫描器的一些请求,防止这些请求大量消耗Nginx服务器资源。
为了更好的维护,最好创建一个文件,包含不期望的user agent列表例如/etc/nginx/blockuseragents.rules包含如下内容:
map $http_user_agent $blockedagent { default 0; ~*malicious 1; ~*bot 1; ~*backdoor 1; ~*crawler 1; ~*bandit 1; } 然后将如下语句放入配置文件的server模块内: include /etc/nginx/blockuseragents.rules; 并加入if语句设置阻止后进入的页面:
Nginx:
include /*/nginx/blockuseragents.rules; server { if ($blockedagent) { return 403; } Nginx file }
5.禁用不使用的HTTP server模块
if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; }
6.设置缓冲区容量上限
server 模块
client_body_buffer_size 1k; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k; #设置后,不管多少HTTP请求都不会使服务器系统的缓冲区溢出了。
7.限制最大连接数
在http模块中,server模块外设置limit_conn_zone可以设置联机的IP
在https,server or location哦明快设置limit_conn 可以设置ip的最大连接数
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 1;
include /*/nginx/blockuseragents.rules; limit_conn_zone $binnary_remove_addr zone=addr:5m; server { if ($blockedagent) { return 403; } if ($request_method !~ ^(GET|GEAD|POST)$) { return 444; } limit_conn addr 1; listen 192.168.1.1:80: server_tokens off; Nginx file }
8.设置监控日志
可以筛选{
Client_ip
浏览器类型
HTTP requests 类
请求内容
服务器响应的内容
}
9.禁用图片外连接到自己的服务区
这样会加大对服务器带宽的压力
location /img/ { valid_referers none blocked 192.168.1.1; if ($invalid_referer) { return 403; } }
10.禁用SSL并且之打开TLS
这个看情况自定义,不是非要禁用的
ssl_protocols TLSv1 TSLv1.1 TSLv1.2;
include /*/nginx/blockuseragents.rules; limit_conn_zone $binnary_remove_addr zone=addr:5m; server { if ($blockedagent) { return 403; } if ($request_method !~ ^(GET|GEAD|POST)$) { return 444; }
ssl_protocols TLSv1 TSLv1.1 TSLv1.2; limit_conn addr 1; listen 192.168.1.1:80: server_tokens off; Nginx file }
11.HTTPS 收费项
阿里云有HTTPS认证,有免费的单站点认证以及收费的全战HTTPS
详情跳转:https://www.cnblogs.com/chenwz/p/9401705.html#4039143
12.如果安装了https,就把所有的流量定向到https
return 301 https://$server_name$request_uri;
加在access_log日至模块的上面一行