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

发布于:2025-09-12 ⋅ 阅读:(22) ⋅ 点赞:(0)

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

一、隐藏Nginx版本号

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

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

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

加上server_tokens off;在网页端就打开就看不到nginx版本号了。
在这里插入图片描述

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

在这里插入图片描述

二、修改运行用户与组

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

  1. 编辑配置文件指定用户与组:
vim /usr/local/nginx/conf/nginx.conf
  1. 在配置文件顶部修改:
user nginx nginx;  # 用户名 组名

在这里插入图片描述

  1. 重启服务并验证:
systemctl restart nginx
# 查看进程,确认子进程由nginx用户运行
ps aux | grep nginx

在这里插入图片描述

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

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

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

五、优化连接超时参数

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

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

在这里插入图片描述

  1. 重启服务生效:
systemctl restart nginx

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

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

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

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

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

  1. 编辑配置文件开启压缩:
vim /usr/local/nginx/conf/nginx.conf
  1. 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;
}
  1. 重启服务后验证:
systemctl restart nginx

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

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

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

  1. 编辑配置文件添加防盗链规则:
vim /usr/local/nginx/conf/nginx.conf
  1. 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。

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

总结

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


网站公告

今日签到

点亮在社区的每一天
去签到