【Nginx 性能优化与防盗链】

文章目录

隐藏版本号

隐藏nginx版本号可以防止攻击者利用特定版本的已知漏洞进行攻击

查看当前版本号

可使用 Fiddler 工具抓包查看 Nginx 版本,或在 CentOS 中使用以下命令查看响应报文首部信息:

方法一:修改配置文件

编辑nginx配置文件

在 http 块中添加以下配置:

重启 Nginx 服务并验证:

方法二:修改源码并重编译

修改 Nginx 源码文件

更改以下定义

重新配置并编译

手动替换二进制文件


编辑配置文件,将 server_tokens 设置为 on,并重启服务


修改用户与组

最小权限原则​:以非root用户运行Nginx,降低被攻击后的影响范围

​隔离风险​:防止Nginx进程被入侵后获得root权限

文件访问控制​:确保Web目录权限与Nginx运行用户匹配,避免权限问题

配置用户与组

编辑 Nginx 配置文件,修改用户和组为 nginx

重启服务并验证进程所属用户

应显示主进程由 root 创建,子进程由 nginx 创建

缓存时间设置

提升性能​:减少客户端重复请求静态资源(如图片、CSS/JS)

降低服务器负载​:通过浏览器缓存减少带宽消耗和服务器压力

优化用户体验​:加速页面加载速度(特别是重复访问时)

配置缓存时间

当Nginx将网页数据返回给客户端后,可设置缓存时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。一般针对静态网页设置,对动态网页不设置缓存时间

Nginx服务器处理请求并配置缓存的完整流程。核心流程和关键配置如下

1、用户请求​​:浏览器发起对图片资源(如JPG/PNG)的HTTP请求。

2、​​Nginx接收请求​​:通过80端口监听请求,匹配配置中的location规则(例如正则表达式location ~ .(jpg|png))。

3、资源处理​​:Nginx根据root配置找到磁盘上的文件,并读取数据。

4、响应与缓存控制​​:

1.1 返回资源时,Nginx 根据 expires 1d的配置,在响应头中设置 Cache-Control: max-age=86400和 Expires字段,从而强制浏览器缓存资源1天。

1.2 浏览器接收后会将资源存入本地缓存,并在后续请求中优先使用缓存(避免重复请求)。

5、​​客户端行为​​:浏览器遵循缓存策略,在有效期内(86400秒)直接使用本地缓存,提升页面加载效率。

为静态资源设置缓存时间,提升静态资源访问效率并降低服务器负载。在 server 块中添加以下 location 配置:

重启服务并访问测试:

1 打开浏览器(推荐使用Chrome),按下F12键

2 切换到Network(网络)选项卡

3 访问URL:http://192.168.10.110/game.jpg

4 在响应列表中找到200状态码的请求,双击查看详情

5 在响应头中确认存在Cache-Control:max-age=86400字段

该设置表示资源缓存有效期为86400秒(24小时)。在此期间,浏览器会直接使用本地缓存数据,无需向Nginx服务器重复请求,有效降低服务器带宽消耗。

日志切割

优化日志分割策略,便于日常分析和文件大小管理,防止日志文件过大。

日志切割脚本

创建日志切割脚本 /opt/fenge.sh,内容如下

添加执行权限并设置定时任务


连接超时设置

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能

配置连接超时参数

释放资源​:关闭闲置连接,避免占用过多的文件描述符和内存

防止DoS攻击​:限制恶意客户端保持长连接消耗服务器资源

​平衡性能与可靠性​:

短超时:快速释放资源,但可能影响高延迟网络用户

长超时:提升用户体验,但增加服务器负担

在 http 块中设置以下参数,优化连接管理


参数说明:

keepalive_timeout:指定 TCP 连接保持时间。

Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。

client_header_timeout:客户端发送完整请求头的超时时间,超时返回 408(Request Timed Out)。

client_body_timeout:客户端发送请求体的超时时间,超时返回 408。

重启 Nginx 使配置生效:

更改进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

优化进程数与 CPU 亲和性

查看 CPU 核数并调整 Nginx 工作进程数:

编辑配置文件,设置工作进程数和 CPU 亲和性:

最优雅和自动化的方式是直接使用 auto 参数,Nginx 会自动检测并设置为逻辑核心数


重启 Nginx 服务

使用场景:

1、高并发

2、CPU压力不均衡的时候

配置网页压缩

Nginx的ngx_http_gzip_module模块提供了内容压缩功能。

该模块默认已安装,能够在向客户端发送数据前对输出内容进行压缩,有效节省带宽并提升用户体验。

可以通过修改配置文件中的相关参数来优化压缩性能

启用 Gzip 压缩

在 http 块中启用压缩功能,优化传输效率:

在 HTML 中引用图片资源,重启 Nginx 后通过浏览器验证响应头是否包含 Content-Encoding: gzip

重启nginx服务

1 . 打开浏览器(推荐使用Chrome),按下F12键

2 . 切换到Network(网络)选项卡

3 . 访问URL:http://192.168.10.110

4 . 在响应列表中找到200状态码的请求,双击查看详情

5 . 在响应头中确认存在Content-Encoding: gzip字段

配置防盗链

Nginx 源主机:192.168.10.131:80 域名(www.yjs.com

盗链网站主机:192.168.10.128:80 域(www.simoncwh.com

防盗链配置设置

在 Nginx 源主机nginx.conf中的server 块中添加以下 location 配置,防止非法网站盗用资源

参数说明:

1 . ~* .(jpg|gif|swf)$:匹配不区分大小写,以.jpg、.gif或.swf结尾的文件

2 . valid_referers:配置可信来源网站,允许其正常访问图片资源

3 .访问控制规则:

none:允许不带Referer字段的请求(如直接在地址栏输入

URL,这种请求是不会包含 Referer 字段的)

blocked:允许非http://开头的,不带协议的请求访问资源

*.yjs.com:仅允许来自该域及其子域的请求

访问示例:通过http://www.yjs.com访问game.jpg时,请求被视为来自http://www.yjs.com

判断逻辑(if):当请求来源不在valid_referers列表中时,$invalid_referer为true,将执行重定向或返回403禁止访问

测试准备

在 Web 源主机和盗链网站主机分别配置 hosts 和 HTML 页面,测试防盗链是否生效。

网页准备:

Web源主机(192.168.10.110)配置:

盗链网站主机(192.168.10.128)

在盗图网站主机上进行浏览器验证

http://www.simoncwh.com

防盗链验证

不设置防盗链时访问http://www.simoncwh.com
设置防盗链时访问http://www.simoncwh.com

完整流程

1 . 完整解析

在浏览器中访问 http://www.simoncwh.com

客户端检查 /etc/hosts 文件,发现 www.simoncwh.com 映射到 192.168.10.128。

浏览器向 192.168.10.128 发送 HTTP 请求获取 index.html。

2 . 获取 HTML 内容

192.168.10.123 的 Nginx 服务器返回 index.html 内容。

HTML 内容如下:

3 .加载图片资源

浏览器解析 HTML 后,发现需要加载图片 http://www.yjs.com/game.jpg。

客户端再次检查 /etc/hosts 文件,发现 www.yjs.com 映射到 192.168.10.131。

浏览器向 192.168.10.131 发送请求获取 game.jpg,并在请求头中设置 Referer 为 http://www.simoncwh.com/(因为图片是从 www.simoncwh.com 页面引用的)。

4 .防盗链检查

请求到达 192.168.10.110 的 Nginx 服务器。

Nginx 匹配防盗链规则 location ~* .(jpg|gif|swf)$,因为请求的是 game.jpg。

Nginx 检查 Referer 头(值为 http://www.simoncwh.com/)是否在 valid_referers 列表中(none blocked *.yjs.com yjs.com)。

Referer 来自 www.simoncwh.com,不在允许列表中,因此 $invalid_referer 变量值为 1,触发防盗链操作。

Nginx 执行 rewrite ^/ http://www.yjs.com/error.png;,这返回一个 302 重定向响应, Response Header 中的 Location 头为 http://www.yjs.com/error.png。

5 .重定向处理:

浏览器收到 302 重定向响应,URLhttp://www.yjs.com/error.png 发送请求。

浏览器在这次请求中可能还会设置 Referer 头为 http://www.simoncwh.com/(因为重定向发生在同源环境下,浏览器通常保留原始 Referer)。

6 .获取 error.png:

请求 error.png 到达 192.168.10.110 的 Nginx 服务器。

防盗链规则只针对 .jpg、.gif 和 .swf 文件,因此 error.png 不匹配防盗链 location 块。

Nginx 直接返回 error.png 图片内容(假设该文件存在于服务器上)。

7 .最终显示

浏览器接收到 error.png 图片,并显示在 www.simoncwh.com 的页面上,代替原本的 game.jpg。

用户看到的是错误图片(error.png),而不是预期的game.jpg。

总结

通过以上几个方面的配置优化,不仅可以提升 Nginx 服务器的处理能力和响应速度,还能有效加强服务的安全性。

在实际生产环境中,应根据具体业务需求和服务器资源情况灵活调整各项参数。定期审查和更新配置,结合监控日志,可确保服务持续稳定运行。

建议在修改配置前备份原文件,并在测试环境验证无误后再部署至生产环境。

相关推荐
行走的领路人8 分钟前
同步服务器时间
运维·服务器
_F_y1 小时前
Linux:多线程
linux·运维·服务器
小小测试开发2 小时前
实战派SQL性能优化:从语法层面攻克项目中的性能瓶颈
android·sql·性能优化
卡布叻_星星2 小时前
Docker之Nginx前端部署(Windows版-x86_64(AMD64)-离线)
前端·windows·nginx
BullSmall2 小时前
集群-节点的概念
运维
vortex52 小时前
Linux 命令行入门:命令的构成与选项用法
linux·运维·服务器
m0_474606782 小时前
Linux安装docker教程
linux·运维·docker
落霞的思绪3 小时前
Mybatis读取PostGIS生成矢量瓦片实现大数据量图层的“快显”
linux·运维·mybatis·gis
像风一样的男人@3 小时前
linux --防火墙
linux·运维·服务器
网硕互联的小客服3 小时前
Centos系统如何更改root账户用户名?需要注意什么?
linux·运维·服务器·数据库·安全