一、安全方面
1.1、隐藏 nginx header 版本号
HTTP header,有个Server:nginx/1.x.x类似会暴露Web服务器所用软件名称以及版本号,这个也是大多数Web服务器最容易暴露版本号的地方,如下:
修改nginx配置文件,在http模块下加入server_tokens off;
server_tokens off;
1.2、 防止恶意解析访问企业网站
参考链接https://www.cnblogs.com/Mr-Ding/p/9575670.html
1.3、 防止恶意解析访问企业网站
为了防止别人恶意将大量域名解析到自己的网站上面。我们可以对nginx做防止恶意域名解析,这样就只能通过自己的域名访问网站,其他域名就会显示错误500
server {
listen 80 default;
return 500;
}
1.4、配置 nginx 图片及目录防盗链
未经同意,在别人的网站上调用,调用我们网站的内容来丰富自己,这样会浪费我们服务器的各种资源(网络、CPU、内存、IO等)
location ~* \.(gif|jpg|png|jpeg|zip)$ {
expires 30d;
valid_referers *.baidu.com *.google.com;
if ($invalid_referer) {
rewrite ^/ http://localhost/123.jpg;
#return 403;
}
root html/www;
}
gif|jpg|png|jpeg|zip 表示对这些后缀的文件进行防盗
*.baidu.com *.google.com 表示这个请求可以正常指定文件资源
if{} 如果地址与上面的不匹配则跳转到rewrite指定的地址,也可以直接return返回403
rewrite ^/ http://localhost/123.jpg 可以放一张防盗图片
expires 30d 指定文件30天浏览缓存
1.5、配置 nginx 防爬虫
参考链接https://blog.csdn.net/shangrila_kun/article/details/89501343
1.6、限制 HTTP 请求方法
参考链接https://segmentfault.com/a/1190000019262947
1.7、 防 DOS 攻击
参考链接https://www.cnblogs.com/bokejiayuan/p/4341350.html
二、性能方面
2.1、配置 nginx worker 进程个数
每一个worker进程都是单线程进程,它们调用各个模块以实现多种多样的功能,如果这些模块确认不会出现阻塞式调用,那么,有多少个CPU内核就配置多少个worker进程,如果有可能出现阻塞式调用,就需要稍多一些worker进程
查看cpu核数
[root@local ~ ]# grep processor /proc/cpuinfo|wc -l
2
2.2、根据 CPU 核数进行 nginx 进程优化
Nginx worker_cpu_affinity 设置
2.3、Nginx worker进程最大打开文件数
worker_rlimit_nofile 65536;
2.4、单个进程允许的客户端最大连接数,配置 nginx 事件处理模型为 epoll
events {
use epoll; #使用epoll模型
worker_connections 20480; #单个进程允许的客户端最大连接数
multi_accept on;
}
三、HTTP 协议方面
3.1、 开启高效的文件传输模式(sendfile/tcp_nopush/tcp_nodelay)
http {
sendfile on; # 开启文件的高效传输模式
tcp_nopush on; # 激活 TCP_CORK socket 选择
tcp_nodelay on; #数据在传输的过程中不进缓存
}
tcp_nopush on:当有数据时,先别着急发送, 确保数据包已经装满数据, 避免了网络拥塞
tcp_nodelay on:有时要抓紧发货, 确保数据尽快发送, 提高可数据传输效率
注意:tcp_nopush和tcp_nodelay只能二选一
3.2、设置连接超时时间
当连接很多时,及时断掉那些建立好的但又长时间不做事的连接,以减少其占用的服务器资源。如果黑客攻击,会不断地和服务器建立连接,因此设置连接超时以防止大量消耗服务器的资源
http {
include mime.types;
server_names_hash_bucket_size 512;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 25;
include vhosts/*.conf;
}
keepalive_timeout :该参数用于设置客户端连接保持会话的超时时间,超过这个时间服务器会关闭该连接
client_header_timeout :该参数用于设置读取客户端请求头数据的超时时间,如果超时客户端还没有发送完整的 header 数据,服务器将返回 "Request time out (408)" 错误
client_body_timeout :该参数用于设置读取客户端请求主体数据的超时时间,如果超时客户端还没有发送完整的主体数据,服务器将返回 "Request time out (408)" 错误
send_timeout :用于指定响应客户端的超时时间,如果超过这个时间,客户端没有任何活动,Nginx 将会关闭连接