Nginx性能优化与防盗链实战指南

Nginx作为一款高性能的HTTP和反向代理服务器,在生产环境中被广泛应用。但默认配置往往无法充分发挥其性能,同时还可能面临资源被盗用等问题。本文将详细介绍Nginx的核心优化技巧与防盗链配置,帮助你提升服务器性能与安全性。

一、隐藏Nginx版本号

Nginx默认会在响应头中暴露版本信息,这可能给攻击者提供潜在的攻击线索。隐藏版本号可有效降低信息泄露风险。

方法一:通过配置文件关闭

  1. 编辑Nginx主配置文件:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. http块中添加关闭版本号的配置:
nginx 复制代码
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;  # 关闭版本号显示
    # 其他配置...
}

加上server_tokens off;在网页端就打开就看不到nginx版本号了。

  1. 重启服务并验证:
bash 复制代码
systemctl restart nginx
# 查看响应头,确认版本号已隐藏
curl -I http://192.168.10.23

二、修改运行用户与组

Nginx默认以nobody用户运行,为了权限管理更规范,建议创建专用用户组:

  1. 编辑配置文件指定用户与组:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. 在配置文件顶部修改:
nginx 复制代码
user nginx nginx;  # 用户名 组名
  1. 重启服务并验证:
bash 复制代码
systemctl restart nginx
# 查看进程,确认子进程由nginx用户运行
ps aux | grep nginx

三、设置静态资源缓存时间

对静态资源(如图片、CSS、JS)设置缓存时间,可减少重复请求,提升客户端加载速度。

  1. 编辑配置文件,添加缓存规则:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. server块中添加针对静态资源的location配置:
nginx 复制代码
server {
    # 其他配置...
    location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
        root html;
        expires 1d;  # 缓存1天(86400秒)
    }
}
  1. 重启服务后验证:
bash 复制代码
systemctl restart nginx

在浏览器中访问静态资源(如http://192.168.10.23/game.jpg),通过"查看元素-网络"查看响应头,确认包含Cache-Control:max-age=86400

四、日志切割方案

Nginx日志会不断增长,定期切割可避免单个日志文件过大,便于管理和分析。

1. 编写日志切割脚本

bash 复制代码
vim /opt/fenge.sh

脚本内容:

bash 复制代码
#!/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. 配置定时任务

bash 复制代码
# 赋予脚本执行权限
chmod +x /opt/fenge.sh
# 测试脚本运行
/opt/fenge.sh
# 添加到crontab,每天凌晨1点执行
crontab -e
# 加入以下内容
0 1 * * * /opt/fenge.sh

五、优化连接超时参数

合理设置连接超时时间,可避免无效连接占用资源,同时保证正常连接的稳定性。

  1. 编辑配置文件修改超时参数:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. http块中添加:
nginx 复制代码
http {
    # 其他配置...
    keepalive_timeout 65 180;  # 长连接超时时间(服务器端65s,客户端响应头180s)
    client_header_timeout 80;  # 等待请求头的超时时间(超时返回408)
    client_body_timeout 80;    # 等待请求体的超时时间(超时返回408)
}
  1. 重启服务生效:
bash 复制代码
systemctl restart nginx

六、调整进程数提升并发处理能力

根据CPU核心数调整Nginx进程数,可充分利用硬件资源,提升并发处理效率。

  1. 查看CPU核心数:
bash 复制代码
cat /proc/cpuinfo | grep -c "physical id"
  1. 编辑配置文件设置进程数:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. 配置进程数与CPU绑定:
nginx 复制代码
worker_processes  2;  # 进程数建议设为CPU核心数或2倍
# 若进程数为2,绑定到不同CPU核心(01表示第一个核心,10表示第二个核心)
worker_cpu_affinity 01 10;
  1. 重启服务验证:
bash 复制代码
systemctl restart nginx
ps -aux | grep nginx  # 查看进程数是否生效

七、配置网页压缩节省带宽

开启Gzip压缩可减小传输文件大小,节省带宽并提升加载速度(默认已安装压缩模块)。

  1. 编辑配置文件开启压缩:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. http块中添加压缩配置:
nginx 复制代码
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;
}
  1. 重启服务后验证:
bash 复制代码
systemctl restart nginx

在浏览器中访问页面,通过"查看元素-网络"查看响应头,确认包含Content-Encoding: gzip

八、配置防盗链防止资源盗用

防盗链可避免其他网站直接引用你的静态资源(如图片、视频),节省服务器带宽。

  1. 编辑配置文件添加防盗链规则:
bash 复制代码
vim /usr/local/nginx/conf/nginx.conf
  1. server块中添加规则:
nginx 复制代码
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.comb.kgc.com)的 Referer。

kgc.com:允许直接来自 kgc.com 主域名的 Referer。

  1. 配置示例说明:
    • ~* \.(jpg|gif|swf)$:匹配不区分大小写的jpg/gif/swf文件
    • valid_referers:设置信任的来源(none允许直接访问,blocked允许非http协议来源,*.kgc.com允许指定域名)
    • 非信任来源会被重定向到自定义错误图片或拒绝访问

总结

通过以上优化措施,可显著提升Nginx的性能(如减少响应时间、提高并发能力)和安全性(如隐藏版本信息、防止资源盗用)。实际应用中,建议根据服务器硬件配置、业务场景(静态/动态资源占比)灵活调整参数,定期监控效果并持续优化。

相关推荐
七夜zippoe27 分钟前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6482 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满2 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9032 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技3 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀4 小时前
Linux环境变量
linux·运维·服务器
zzzsde4 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
yuanmenghao4 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
聆风吟º5 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann