Nginx作为一款高性能的HTTP和反向代理服务器,在生产环境中被广泛应用。但默认配置往往无法充分发挥其性能,同时还可能面临资源被盗用等问题。本文将详细介绍Nginx的核心优化技巧与防盗链配置,帮助你提升服务器性能与安全性。
一、隐藏Nginx版本号
Nginx默认会在响应头中暴露版本信息,这可能给攻击者提供潜在的攻击线索。隐藏版本号可有效降低信息泄露风险。
方法一:通过配置文件关闭
- 编辑Nginx主配置文件:
vim /usr/local/nginx/conf/nginx.conf
- 在
http
块中添加关闭版本号的配置:
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; # 关闭版本号显示
# 其他配置...
}
加上server_tokens off;在网页端就打开就看不到nginx版本号了。
- 重启服务并验证:
systemctl restart nginx
# 查看响应头,确认版本号已隐藏
curl -I http://192.168.10.23
二、修改运行用户与组
Nginx默认以nobody
用户运行,为了权限管理更规范,建议创建专用用户组:
- 编辑配置文件指定用户与组:
vim /usr/local/nginx/conf/nginx.conf
- 在配置文件顶部修改:
user nginx nginx; # 用户名 组名
- 重启服务并验证:
systemctl restart nginx
# 查看进程,确认子进程由nginx用户运行
ps aux | grep nginx
三、设置静态资源缓存时间
对静态资源(如图片、CSS、JS)设置缓存时间,可减少重复请求,提升客户端加载速度。
- 编辑配置文件,添加缓存规则:
vim /usr/local/nginx/conf/nginx.conf
- 在
server
块中添加针对静态资源的location
配置:
server {
# 其他配置...
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
root html;
expires 1d; # 缓存1天(86400秒)
}
}
- 重启服务后验证:
systemctl restart nginx
在浏览器中访问静态资源(如http://192.168.10.23/game.jpg
),通过"查看元素-网络"查看响应头,确认包含Cache-Control:max-age=86400
。
四、日志切割方案
Nginx日志会不断增长,定期切割可避免单个日志文件过大,便于管理和分析。
1. 编写日志切割脚本
vim /opt/fenge.sh
脚本内容:
#!/bin/bash
# 日志切割脚本
day=$(date -d "-1 day" "+%Y%m%d") # 获取前一天日期
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path # 若日志目录不存在则创建
# 移动并命名旧日志
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day
# 向Nginx发送信号,重建新日志文件
kill -USR1 $(cat $pid_path)
# 删除30天前的旧日志
find $logs_path -mtime +30 -exec rm -rf {} \;
2. 配置定时任务
# 赋予脚本执行权限
chmod +x /opt/fenge.sh
# 测试脚本运行
/opt/fenge.sh
# 添加到crontab,每天凌晨1点执行
crontab -e
# 加入以下内容
0 1 * * * /opt/fenge.sh
五、优化连接超时参数
合理设置连接超时时间,可避免无效连接占用资源,同时保证正常连接的稳定性。
- 编辑配置文件修改超时参数:
vim /usr/local/nginx/conf/nginx.conf
- 在
http
块中添加:
http {
# 其他配置...
keepalive_timeout 65 180; # 长连接超时时间(服务器端65s,客户端响应头180s)
client_header_timeout 80; # 等待请求头的超时时间(超时返回408)
client_body_timeout 80; # 等待请求体的超时时间(超时返回408)
}
- 重启服务生效:
systemctl restart nginx
六、调整进程数提升并发处理能力
根据CPU核心数调整Nginx进程数,可充分利用硬件资源,提升并发处理效率。
- 查看CPU核心数:
cat /proc/cpuinfo | grep -c "physical id"
- 编辑配置文件设置进程数:
vim /usr/local/nginx/conf/nginx.conf
- 配置进程数与CPU绑定:
worker_processes 2; # 进程数建议设为CPU核心数或2倍
# 若进程数为2,绑定到不同CPU核心(01表示第一个核心,10表示第二个核心)
worker_cpu_affinity 01 10;
- 重启服务验证:
systemctl restart nginx
ps -aux | grep nginx # 查看进程数是否生效
七、配置网页压缩节省带宽
开启Gzip压缩可减小传输文件大小,节省带宽并提升加载速度(默认已安装压缩模块)。
- 编辑配置文件开启压缩:
vim /usr/local/nginx/conf/nginx.conf
- 在
http
块中添加压缩配置:
http {
# 其他配置...
gzip on; # 开启压缩
gzip_min_length 1k; # 最小压缩文件大小(小于1k不压缩)
gzip_buffers 4 64k; # 压缩缓冲区(4个64k缓冲区)
gzip_http_version 1.1; # 支持的HTTP版本
gzip_comp_level 6; # 压缩等级(1-9,等级越高压缩率越高但耗CPU)
gzip_vary on; # 支持前端缓存服务器存储压缩页面
# 需压缩的文件类型
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
}
- 重启服务后验证:
systemctl restart nginx
在浏览器中访问页面,通过"查看元素-网络"查看响应头,确认包含Content-Encoding: gzip
。
八、配置防盗链防止资源盗用
防盗链可避免其他网站直接引用你的静态资源(如图片、视频),节省服务器带宽。
- 编辑配置文件添加防盗链规则:
vim /usr/local/nginx/conf/nginx.conf
- 在
server
块中添加规则:
server {
# 其他配置...
location ~* \.(jpg|gif|swf)$ {
# 信任的引用来源(允许直接访问、kgc.com域名及子域名)
valid_referers none blocked *.kgc.com kgc.com;
# 非信任来源处理(重定向到错误图片或返回403)
if ($invalid_referer) {
rewrite ^/ http://www.kgc.com/error.png;
# return 403; # 也可直接返回403禁止访问
}
}
}
valid_referers 是 Nginx 的指令,用于定义 “可信的 Referer 来源”。
none:允许 “没有 Referer” 的请求(比如用户直接在地址栏输入网址,或浏览器隐私设置屏蔽了 Referer)。
blocked:允许 “Referer 被防火墙 / 代理等屏蔽(显示为不带协议的纯域名或 IP)” 的请求。
*.kgc.com:允许所有 kgc.com 的子域名(如 a.kgc.com、b.kgc.com)的 Referer。
kgc.com:允许直接来自 kgc.com 主域名的 Referer。
- 配置示例说明:
~* \.(jpg|gif|swf)$
:匹配不区分大小写的jpg/gif/swf文件valid_referers
:设置信任的来源(none
允许直接访问,blocked
允许非http协议来源,*.kgc.com
允许指定域名)- 非信任来源会被重定向到自定义错误图片或拒绝访问
总结
通过以上优化措施,可显著提升Nginx的性能(如减少响应时间、提高并发能力)和安全性(如隐藏版本信息、防止资源盗用)。实际应用中,建议根据服务器硬件配置、业务场景(静态/动态资源占比)灵活调整参数,定期监控效果并持续优化。