Nginx 优化与防盗链实践
前言
1. 隐藏版本号
2. 修改运行用户与组
3. 配置静态资源缓存
4. 日志切割与轮转
5. 合理设置连接超时
6. 调整工作进程数
7. 启用 Gzip 压缩
8. 配置防盗链保护图片资源
结语
前言
在实际运维场景中,Nginx 除了作为高性能 Web/反向代理服务器之外,还可以通过一些简单的优化让网站更快、更省资源、更安全。本文总结常见的优化项并演示如何开启防盗链保护资源,参数已调整以便于大家直接上手。
1. 隐藏版本号
出于安全考虑,不要在响应头中暴露 Nginx 的真实版本。
-
通过配置文件关闭版本号:
http {include mime.types;default_type application/octet-stream;server_tokens off; # 关闭版本号 }
重启并测试:
systemctl restart nginx curl -I http://192.168.10.88
-
通过修改源码伪装版本:
#define NGINX_VERSION "1.3.5" #define NGINX_VER "Apache" NGINX_VERSION
重新编译后安装。
2. 修改运行用户与组
user webuser webgroup; # 修改为 webuser 用户、webgroup 组
重启后用 ps aux | grep nginx
查看主/子进程身份。
3. 配置静态资源缓存
合理利用浏览器缓存减少服务器压力:
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {root html;expires 2d; # 缓存 2 天 }
访问图片资源时可在浏览器开发者工具看到 Cache-Control: max-age=172800
。
4. 日志切割与轮转
写一个简单的日志切割脚本,防止 access.log 过大:
#!/bin/bash #定义日志前一天时间 day=$(date -d "-1 day" "+%Y%m%d" ) #设定切割的日志文件存放目录 log_path="/var/log/nginx" #设定nginx进程pid位置,用于重启log日志文件 pid_path="/usr/local/nginx/logs/nginx.pid" #检测切割的日志文件目录是否存在,没有则创建 if [ ! -d $log_path ]; thenmkdir -p $log_path fi #切割当天日志文件并记录 mv /usr/local/nginx/logs/access.log ${log_path}/uuz.com-access.log-$day #重启nginx进程用于重建日志文件 kill -USR1 `cat $pid_path` #删除一个月前的日志文件 find $log_path -mtime +30 -exec rm -rf {} \;
定时任务改为凌晨 2 点:
crontab -e 0 2 * * * /opt/fenge.sh
5. 合理设置连接超时
通过调整 keepalive 和客户端超时参数,防止长时间占用连接资源:
http {keepalive_timeout 60 120; # 主动关闭时间 60sclient_header_timeout 50; # 请求头超时 50sclient_body_timeout 50; # 请求体超时 50s }
6. 调整工作进程数
根据 CPU 核心数调整 worker_processes
并绑定 CPU 提高并发性能:
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
7. 启用 Gzip 压缩
通过 ngx_http_gzip_module
模块在传输前压缩内容,节省带宽、提升用户体验:
http {gzip on;gzip_min_length 512; # 最小压缩文件大小gzip_buffers 8 32k; # 缓冲区 8 个 32kgzip_comp_level 5; # 压缩等级 5gzip_types text/plain text/css application/javascript image/png image/jpeg; }
配置后访问页面,在浏览器开发者工具里可以看到 Content-Encoding: gzip
。
8. 配置防盗链保护图片资源
通过 valid_referers
指令只允许指定域名访问图片,防止其他网站盗链。
location ~* \.(jpg|gif|swf)$ {valid_referers none blocked *.myweb.com myweb.com;if ($invalid_referer) {return 403; # 非信任来源直接返回403} }
测试步骤:
-
在源站
/usr/local/nginx/html
下放置game.jpg
和error.png
,并在index.html
中引用图片。 -
在
/etc/hosts
中配置:echo "192.168.10.88 www.myweb.com" >> /etc/hosts echo "192.168.10.99 www.other.com" >> /etc/hosts
-
在另一台主机(盗链站)引用
http://www.myweb.com/game.jpg
,访问http://www.other.com
测试防盗链效果。
结语
通过这些优化,Nginx 不仅能提供高性能的 Web 服务,还能在安全性、带宽利用率、日志管理等方面做得更好。结合防盗链策略,可以有效保护网站资源不被滥用。这些小技巧在日常运维中非常实用。