首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >这套生产级 Nginx 服务优化与防盗链配置方案,让面试官当场拍板给我 Offer 了!

这套生产级 Nginx 服务优化与防盗链配置方案,让面试官当场拍板给我 Offer 了!

作者头像
民工哥
发布2026-03-24 11:16:16
发布2026-03-24 11:16:16
240
举报

特色专栏

MySQL / PostgreSQL / MongoDB

ElasticSearch / Hadoop / Redis

Kubernetes / Docker / DevOps

Kafka / RabbitMQ / Zookeeper

监控平台 / 应用与服务 / 集群管理

Nginx / Git / Tools / OpenStack

大家好,我是民工哥!

这套 30 分钟搞定生产级 Nginx 服务优化与防盗链配置方案,让面试官当场拍板给我 Offer!

废话不多说,直接上干货,开干!

Nginx 优化与防盗链是提高网站性能和安全性的重要措施。

Nginx服务优化

配置Nginx隐藏版本号

隐藏Nginx版本号,避免安全漏洞泄漏:修改配置文件法;修改源码法

代码语言:javascript
复制
server_tokens off; ##添加,关闭版本号
nginx.h ##修改源码
代码语言:javascript
复制
#重新编译安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j 2 && make install
代码语言:javascript
复制
headers-more-nginx-module-0.34.tar.gz
插件包,解压到一个目录,

#编译安装
nginx,./configure --add-module='模块路径' && make -j 2 && make install 

修改nginx.conf 文件,在http配置块加more_clear_ headers '响应头字段';可去除响应头任何字段
修改Nginx用户与组

Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制,Nginx默认使用nobody用户账号与组账号。

修改的方法:编译安装时指定用户与组;修改配置文件指定用户与组。

代码语言:javascript
复制
user 用户名 组名;
配置Nginx网页缓存时间

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

设置方法:修改配置文件,在http段、或者server段、或者location段加入对特定内容的过期参数 expires 缓存时间;

实现Nginx的日志切割

随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件,太大的日志文件对监控是一个大灾难,定期进行日志文件的切割。

Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割,通过Linux的计划任务周期性地进行日志切割。shell脚本 + crontab

代码语言:javascript
复制
在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtime

ctime(status time):
当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,更像是change time,只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间。

atime(accesstime):
当使用这个文件的时候就会更新这个时间。

mtime(modification time):
当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别。
配置Nginx实现连接超时

为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。

超时参数:

代码语言:javascript
复制
Keepalive_timeout 服务端超时时间 客户端超时时间; ##设置连接保持超时时间
Client_header_timeout ##指定等待客户端发送请求头的超时时间
Client_body_timeout ##设置请求体读超时时间
代码语言:javascript
复制
keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定一个长连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

client_header_timeout
客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

client_body_timeout
指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
更改Nginx运行进程数

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

修改配置文件的worker_processes参数:一般设为CPU的个数或者核数;在高并发情况下可设置为CPU个数或者核数的2倍。

增加进程数,可减少了系统的开销,提升了服务速。

默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU。

代码语言:javascript
复制
cat /proc/cpuinfo | grep -c "physical id" #查看cpu核数 

ps aux | grep nginx #查看nginx主进程中包含几个子进程 

worker_processes 与服务器CPU数量相同或auto   #修改为cpu的总核数,一般情况不超过8个

worker_cpu_affinity ##工作进程静态绑核
#将每个worker子进程与特定CPU物理核心绑定,提升cpu利用率,进而提升性能。避免同一个worker子进程在不同的CPU核心上切换或者多个进程跑在一个CPU上,缓存失效,降低性能。
配置Nginx实现网页压缩功能

Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。

允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装。

可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。

代码语言:javascript
复制
gzip on; #开启gzip压缩功能
代码语言:javascript
复制
#实现网页图片的大小压缩
http_image_filter_module是Nginx提供的集成图片处理模块,可以用于实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息。

yum install -y gd-devel  #yum在线源安装gd-devel,http_image_filter_module模块需要依赖gd-devel的支持,重新编译安装启动。

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_image_filter_module 
make -j 2 && make install

image_filter resize 200 200; #按等比例缩小图像的宽或高至指定大小。如果只想设置一个维度,另一维可以指定为:“-”

#注:Nginx的Gzip压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能。
1)图片/视频类型资源 原因:图片如jpg、png文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。
2)大文件资源 原因:会消耗大量的cpu资源,且不一定有明显的效果。
系统优化

增加文件描述符限制:增加系统允许的最大文件描述符数。

调整内核参数:修改内核参数以提高网络性能,如增加系统文件描述符的限制、TCP连接队列的大小,以及优化TCP的可用端口范围等。

使用异步I/O:在支持的系统上启用异步I/O,以提高文件读写性能。

硬件优化

使用SSD:使用固态硬盘(SSD)代替传统的机械硬盘(HDD),以提高I/O性能。

增加内存:增加服务器内存,以减少交换空间的使用,并提高缓存命中率。

负载均衡:使用负载均衡器将流量分配到多个Nginx实例,以提高整体处理能力。

监控和调试

启用Nginx状态模块,监控Nginx的运行状态,以及时发现和解决性能瓶颈。

使用日志分析工具,如GoAccess或AWStats,分析访问日志,找出性能瓶颈和优化点。

配置Nginx实现防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失 Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理

防盗链可以防止其他网站直接链接到你的资源(如图片、视频等),从而节省带宽和提高网站的安全性。Nginx防盗链主要通过ngx_http_referer_module模块实现。

Referer头的功能和用途

HTTP Referer 是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器请求是从哪个页面链接过来的。服务器可以借此获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。

防盗链配置

在Nginx配置文件中,使用valid_referers指令定义合法的Referer。

使用if指令检查$invalid_referer变量,如果请求的Referer无效,则返回指定的错误码(如403或502)。

代码语言:javascript
复制
rewrite if ( $invalid_referer) {rewrite... }
代码语言:javascript
复制
~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com 访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 这个链接过来的。
blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,即进行重写或返回 403 页面。

实验演练

盗链网站主机(20.0.0.160)

Web源主机(20.0.0.150)

nginx常用模块

代码语言:javascript
复制
http_stub_status_module       #访问状态统计模块
http_gzip_module              #网页压缩模块
http_rewrite_module           #URL地址重写模块
http_ssl_module               #https安全加密模块
http_auth_basic_module        #网页用户认证模块
http_fastcgi_module           #fastcgi转发模块
http_image_filter_module      #图片处理模块
http_mp4/flv_module           #mp4/flv视频格式模块
http_limit_req_module         #限制请求数模块
http_limit_conn_module        #限制连接数模块
http_proxy_module             #代理转发模块
http_upstream_*_module        #负载均衡模块
stream                        #四层代理转发模块

部分内容来源:cnblogs.com/zsy828/p/18223841

👍 如果你喜欢这篇文章,请点赞并分享给你的朋友!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx服务优化
    • 配置Nginx隐藏版本号
    • 修改Nginx用户与组
    • 配置Nginx网页缓存时间
    • 实现Nginx的日志切割
    • 配置Nginx实现连接超时
    • 更改Nginx运行进程数
    • 配置Nginx实现网页压缩功能
    • 系统优化
    • 硬件优化
    • 监控和调试
  • 配置Nginx实现防盗链
  • 实验演练
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档