在日常工作中使用nginx遇到的问题总结:
因为通过查看官方的release note会发现修复了很多bug,不及时更新在生产环境会有更大的风险
#在编译安装时,执行./configure方法时加上以下配置指令,可以显式的删除不用的模块
#配置指令是由模块提供的。确保禁用的模块不包含需要使用的指令!在决定禁用模块之前,需要检查Nginx文档中每个模块可用的指令列表
./configure --without-http_dav_module --withouthttp_spdy_module
server_tokens在打开的情况下会使404页面显示Nginx的当前版本号
不法者会利用此信息尝试相应Nginx版本的漏洞,需要在nginx.conf中http模块设置server_tokens off,然后重启nginx
server {
listen 192.168.10.10;
Server_tokens off;
.....省略
}
if ($http_user_agent ~* (curl) ) {
return 404;
}
user agent:用户代理是指浏览器,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好,通知服务器当前使用的是什么浏览器、工具等等,例如火狐、谷歌chrome、wget、curll;因为是HTTP协议中对浏览器的一种标识,所以禁止非法的User Agent可以阻止爬虫和扫描器的一些请求,防止这些请求大量消耗Nginx服务器资源
#编辑nginx配置文件,以下内容放在http配置段,那么整个nginx都生效,如果放到server里,只对一个有效
#禁止一个
if ($http_user_agent ~* (curl) ) {
return 404;
}
#禁止多个URL
if ($http_user_agent ~* (curl) ) return 404;
}
#禁止非法的User Agent,将如下语句放入配置文件的server模块内:
map $http_user_agent $blockedagent {
default 0;
~*malicious 1;
~*bot 1;
~*backdoor 1;
~*crawler 1;
~*bandit 1;
}
include /etc/nginx/blockuseragents.rules;
#并加入if语句设置阻止后进入的页面:
server {
if($blockuseragents){
return 403;
}
.....省略
}
在web站点和应用中,有的方法只支持GET、POST和HEAD,在配置文件中的server模块中就可以加入如下方法可以阻止一些欺骗攻击
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}
#设置后,不管多少HTTP请求都不会使服务器系统的缓冲区溢出了
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
#在http模块内,server模块外设置limit_conn_zone,可以设置连接的IP
#在http,server或location模块设置limit_conn,可以设置IP的最大连接数
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 1;
有一个img目录用来存储图片,IP是192.168.10.10,加入如下配置可以防止外链.来减轻服务器的带宽压力
location /img/ {
valid_referers none blocked 192.168.10.10;
if ($invalid_referer) {
return 403;
}
}
# openssl genrsa -aes256 -out tecmintlovesnginx.key 1024
# openssl req -new -key tecmintlovesnginx.key -out tecmintlovesnginx.csr
# cp tecmintlovesnginx.key tecmintlovesnginx.key.org
# openssl rsa -in tecmintlovesnginx.key.org -out tecmintlovesnginx.key
# openssl x509 -req -days 365 -in tecmintlovesnginx.csr -signkey tecmintlovesnginx.key -out tecmintlovesnginx.crt
#配置Server模块
server {
....省略
ssl_certificate /etc/nginx/sites-enabled/certs/tecmintlovesnginx.crt;
ssl_certificate_key /etc/nginx/sites-enabled/certs/tecmintlovesnginx.key;
....省略
}
#在server中添加
return 301 https://$server_name$request_uri;
提高 nginx 服务器 安全性,稳定性、性能 --经验总结-持续更新
原文:https://www.cnblogs.com/qinxu/p/14200949.html