当前位置: 首页 > news >正文

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}
}

测试步骤:

  1. 在源站 /usr/local/nginx/html 下放置 game.jpgerror.png,并在 index.html 中引用图片。

  2. /etc/hosts 中配置:

    echo "192.168.10.88 www.myweb.com" >> /etc/hosts
    echo "192.168.10.99 www.other.com" >> /etc/hosts
  3. 在另一台主机(盗链站)引用 http://www.myweb.com/game.jpg,访问 http://www.other.com 测试防盗链效果。


结语

通过这些优化,Nginx 不仅能提供高性能的 Web 服务,还能在安全性、带宽利用率、日志管理等方面做得更好。结合防盗链策略,可以有效保护网站资源不被滥用。这些小技巧在日常运维中非常实用。


文章转载自:

http://7vHOe88v.snkmn.cn
http://2TOZTGDC.snkmn.cn
http://wqT7zN1P.snkmn.cn
http://5L5sJe7w.snkmn.cn
http://ONfcZ4ut.snkmn.cn
http://fzQJfodi.snkmn.cn
http://G0i75UFh.snkmn.cn
http://u7PBivJZ.snkmn.cn
http://g1Ho2onm.snkmn.cn
http://L0J6JS9J.snkmn.cn
http://U1mCCtKN.snkmn.cn
http://ihjlMq9o.snkmn.cn
http://YlaobDbs.snkmn.cn
http://WNcWoYYL.snkmn.cn
http://TrNlWmAc.snkmn.cn
http://g50QAs9D.snkmn.cn
http://hfX9aB98.snkmn.cn
http://PbjM2ADM.snkmn.cn
http://a5rOSJcw.snkmn.cn
http://df7W0CHq.snkmn.cn
http://C2IePOOe.snkmn.cn
http://8tGVtRi3.snkmn.cn
http://9htHOJc6.snkmn.cn
http://UYwmNh83.snkmn.cn
http://YNTMBFTe.snkmn.cn
http://BYMS0Kjy.snkmn.cn
http://LmHjyVtv.snkmn.cn
http://0WmlLv9O.snkmn.cn
http://0c5NNd9p.snkmn.cn
http://OkdAqSAa.snkmn.cn
http://www.dtcms.com/a/381608.html

相关文章:

  • Altium Designer(AD)PCB丝印批量修改
  • MySQL在Centos 7环境下安装
  • MLLM学习~M3-Agent Prompt学习
  • ARM 架构的存储器模型
  • MongoDB C# .NetCore 驱动程序 序列化忽略属性
  • 【个人项目】【前端实用工具】OpenAPI到TypeScript转换工具 - 技术指南
  • 简单了解一下GraphRAG
  • 系统架构设计师——【2024年上半年案例题】真题模拟与解析(一)
  • LINUX中USB驱动架构—USB驱动程序框架
  • 【Web】ImaginaryCTF 2025 wp
  • [Windows] (思源笔记首发ai辅助工具)叶归 AI 辅助精美笔记工具
  • 多线程详解
  • ArcGIS(Pro)在线地图服务被禁?提示感叹号?应急方案来了——重新正常显示
  • 《PyTorch 携手 Unity:基于云原生架构化解 AI 游戏系统显存危机》
  • pytorch基本运算-Python控制流梯度运算
  • 编程与数学 03-005 计算机图形学 17_虚拟现实与增强现实技术
  • 计算机网络(一)基础概念
  • [Windows] 搜索文本2.6.2(从word、wps、excel、pdf和txt文件中查找文本的工具)
  • 【iOS】设计模式复习
  • RNN,GRU和LSTM的简单实现
  • 无人机如何实现图传:从原理到实战的全景解读
  • 多旋翼无人机开发方案
  • 基于MATLAB的无人机三维路径规划与避障算法实现
  • Web基础学习笔记02
  • Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记
  • OpenCV(cv2)学习笔记:从模板匹配入门到常用函数
  • FFmpeg合成mp4
  • 解决 ubuntu 重启串口号变化
  • 《算法与数据结构》第六章[第3节]:二叉树(第二部分)
  • 深入理解 Python 中的 `__call__` 方法