Nginx的优化
隐藏版本号
暴露版本号,攻击者就可以根据版本漏洞进行攻击。
查看版本号的方法:
curl -I http://192.168.110.60
网页访问F12查看源代码
隐藏版本号的方法
方法一、修改配置文件
添加关闭版本号
vim /usr/local/nginx/conf/nginx.conf
server_tokens off;
检查配置文件
nginx -t
重启服务
systemctl restart nginx
查看版本号
网页访问F12查看源代码
方法二、修改源码文件,重新编译安装
vim /opt/nginx-1.26.2/src/core/nginx.h
cd /opt/nginx-1.26.2/
nginx -V(显示 Nginx 的版本信息以及编译时包含的配置参数)
./configure 编译
编译安装
make -j 2 && make install
查看版本号
curl -I http://192.168.110.60
网页访问F12查看源代码
修改用户与组
nginx的默认用户是nobody,修改默认用户便于管理。
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx;
systemctl restart nginx
ps aux | grep nginx
修改缓存时间
当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。
一般针对静态网页设置,对动态网页不设置缓存时间。
vim /usr/local/nginx/conf/nginx.conf
添加新的 location,以图片作为缓存对象,指定缓存时间为1天
location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
root html;
expires 1d;
}
systemctl restart nginx
创建一个测试页面
<html>
<body>
<img src="river.png"/>
</body>
</html>
网页访问F12查看源代码
设置nginx日志切割
日志切割有力于发现故障时排障。
写一个日志切割的shell脚本
vim nginx_log.sh
#!/bin/bash
YESTERDAY=$(date -d "-1 day" "+%Y%m%d")
LOGPATH="/opt/log/nginx"
PIDPATH="/usr/local/nginx/logs/nginx.pid"
if [ !-d $L0GPATH ];then
mkdir -p $LOGPATH
fi
mv /usr/local/nginx/logs/access.log ${LOGPATH}/access.log-$YESTERDAY
mv /usr/local/nginx/logs/error.log ${LOGPATH}/error.log-$YESTERDAY
kill -USR1 $(cat $PIDPATH)
find $L0GPATH -mtime +90 -delete
chmod +x /opt/nginx_log.sh
./nginx_log.sh
查看运行结果
设置周期任务
crontab -e
0 1 * * * /opt/nginx_log.sh
设置连接超时
HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。
若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 60 50; ----连接保持超时时间,服务端60s,客户端50s
keepalive_requests 100; ----连接保持最大请求次数
client_header_timeout 15; ----客户端向服务端发送一个完整的 request header 的超时时间。
client_body_timeout 15; ----指定客户端与服务端建立连接后发送 request body 的超时时间。
nginx -t
systemctl restart nginx
网页访问F12查看源代码
更改进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。
查看cpu核数(默认为1)
cat /proc/cpuinfo | grep -c "physical id"
查看nginx主进程中包含几个子进程
ps aux | grep nginx
vim /usr/local/nginx/conf/nginx.conf
worker_processes auto;(设置为CPU总核数)
worker_cpu_affinity 0001 0010 0100 1000;(设置每个进程由不同cpu处理)
nginx -t
systemctl restart nginx
查看修改
ps aux | grep nginx
配置网页压缩
ngx_http_gzip_module是Nginx提供对文件压缩功能的模块。
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。
vim /usr/local/nginx/conf/nginx.conf
gzip on; ----取消注释,开启gzip压缩功能
gzip_min_length 1k; ----最小压缩文件大小,小于设置值的文件将不会压缩
gzip_buffers 4 16k; ----压缩缓冲区,这里设置以16k为单位,按照原始数据大小以16k为单位的4倍申请内存
gzip_http_version 1.1; ----用于识别HTTP协议版本
gzip_comp_level 5; ----压缩比率,压缩比例由低到高从1到9,默认为1,在生产环境中一般设置该参数的值在3~5之间,最好不要超过5
gzip_vary on; ----支持前端缓存服务器存储压缩页面
gzip_disable "MSIE [1-6]\."; ----配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_types text/plain text/javascript text/css text/xml application/x-javascript application/xml application/x-httpd-php application/javascript application/json; ----压缩类型,表示哪些网页文档启用压缩功能
实现网页图片的大小压缩
http_image_filter_module是Nginx提供的集成图片处理模块,可以用于实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息。
yum在线源安装gd-devel,http_image_filter_module模块需要依赖gd-devel的支持。
yum install -y gd-devel
重新配置,编译安装nginx
cd /opt/nginx-1.26.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_image_filter_module
make && make install
编辑配置文件
vim /usr/local/nginx/conf/nginx.conf
gzip on;
gzip_types text/plain .... image/jpeg image/gif image/png;
location ~* \.(jpg|gif|png)$ {
image_filter resize 200 200;
}
nginx -t
systemctl restart nginx
网页访问F12查看源代码
Nginx的Gzip压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能。
1)图片/视频类型资源 原因:图片如jpg、png文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。
2)大文件资源 原因:会消耗大量的cpu资源,且不一定有明显的效果。
配置防盗链
源网站图片
盗链网站
访问盗链网站是图片是源网站的占用源网站的资源
设置防盗链
vim /usr/local/nginx/conf/nginx.conf
location ~* \.(jpg|gif|png)$ {
valid_referers none blocked *.sunny60.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.sunny.com/error.png;
}
}
nginx -t
systemctl restart nginx
网页访问