news 2026/4/17 7:13:58

【Nginx专项】基础入门篇:状态页、微更新、内容替换、读取、压缩及防盗链

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Nginx专项】基础入门篇:状态页、微更新、内容替换、读取、压缩及防盗链

5.Nginx服务WEB模块

### 5.1 连接状态`http_stub_statu_module`状态页

展示用户和Nginx链接数量信息

状态页显示的是整个服务器的状态, 而非虚拟主机的状态

5.1.1 查询是否安装
[root@Nginx ~]# nginx -V 2>&1 | grep -o "stub_status"stub_status
5.1.2 启动状态模块
# 此时,浏览器访问 http://172.25.254.44/nginx_status# 会发现,此时为 “404” --> 未启用此模块

5.1.2.1 允许所有用户查看
[root@Nginx ~]# cat /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;location /{root /Page_Home;index index.html;}location /nginx_status{stub_status;# 开启模块allow all;# 允许所有人查看}}[root@Nginx ~]# systemctl restart nginx
# 浏览器访问:http://172.25.254.44/nginx_statusActive connections:2# 当前活动连接数server accepts handled requests# 服务器接受处理请求221Reading:0Writing:1Waiting:1# 2 总连接数# 2 成功的连接数# 1 总共处理的请求数# Reading 读取客户端Header的信息数 请求头# Writing 返回客户端的Header的信息数 响应头# Waiting 等待的请求数 开启了Keepalived

5.1.2.2 仅允许特定用户查看
[root@Nginx ~]# yum install -y httpd-tools[root@Nginx ~]# htpasswd -cm /Page_Home/.htpasswd adminNew password: admin Re-type new password: admin[root@Nginx ~]# ll /Page_Home/.htpasswd-rw-r--r--1root root44Apr1120:58 /Page_Home/.htpasswd[root@Nginx ~]# cat /Page_Home/.htpasswdadmin:$apr1$nzWFN1jL$EevWAyfGm0HfJtAH5O6GE1# -c 参数表示创建(Create)一个新的密码文件。# -m 参数表示使用 MD5 加密算法对密码进行加密。# 请注意:-c 是创建命令,如果以后要添加第二个用户,需要去掉 -c 参数,否则会覆盖掉已有的 admin 用户
[root@Nginx ~]# cat /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;error_page404/404.html;location /{root /Page_Home;index index.html;}location=/404.html{root /Page_Home;index /404.html;}location /nginx_status{stub_status;# 开启状态监控auth_basic"auth login";# HTTP基础验证人整体式auth_basic_user_file /Page_Home/.htpasswd;# 认证文件路径# allow xxxx 只能跟 单个IP/网段/all}}

5.2 随机主页random_index_module微更新

将主页设置成随机页面,是一种微调更新机制

5.2.1 模拟场景

准备相关页面

[root@Nginx ~]# mkdir /app[root@Nginx ~]# touch /app/{blue,green,red,.yellow}.html[root@Nginx ~]# cat /app/.yellow.html<html><head><title>Yellow Color</title></head><bodystyle="background-color:yellow"><h1>Yellow Color</h1></body></html>[root@Nginx ~]# cat /app/green.html<html><head><title>Green color</title></head><bodystyle="background-color:green"><h1>Green color</h1></body></html>[root@Nginx ~]# cat /app/red.html<html><head><title>red color</title></head><bodystyle="background-color:red"><h1>Red Color</h1></body></html>[root@Nginx ~]# cat /app/blue.html<html><head><title>Blue Color</title></head><bodystyle="background-color:blue"><h1>Blue Color</h1></body></html>

启动随机主页

[root@Nginx ~]# cat /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;location /{root /app;random_index on;}}# 浏览器访问 http://172.25.254.44 并不断刷新

# 此时打开隐藏文件.yellow.html[root@Nginx ~]# cp /app/.yellow.html /app/yellow.html[root@Nginx ~]# systemctl restart nginx

5.3 替换模块sub_module网页内容临时替换

只能替换响应体,不能替换响应头

[root@Nginx ~]# vim /Page_Home/index.htmlThe First Rich!The First Rich!

开启替换模块(Once)

[root@Nginx ~]# vim /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;sub_filter'First''Second';sub_filter_once on;location /{root /Page_Home;index index.html;}}# 浏览器访问 http://172.25.254.44# 为什么只有第一个First变成了Second?

[root@Nginx ~]# vim /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;sub_filter'First''Second';sub_filter_once off;# 关闭Oncelocation /{root /Page_Home;index index.html;}}# 清除缓存(或打开无痕模式)浏览器访问 http://172.25.254.44 观察内容

# 此时发现已经变了,但是查看index.html文件会发现,源文件并没有改动[root@Nginx ~]# curl http://172.25.254.44/The Second Rich!The Second Rich![root@Nginx ~]# cat /Page_Home/index.htmlThe First Rich!The First Rich!

5.4 文件读取ngx_http_core_module

[root@Nginx ~]# grep -nA1 'sendfile' /etc/nginx/nginx.conf24: sendfile on;# 启用高效文件传输25-#tcp_nopush on;# 以下都为默认tcp_nopush off;# TCP推送优化,优化网络包大小,减少碎片tcp_nodelay on;# 仅在Keepalived中生效,禁用Nagle算法,确保小数据包(如实时 HTTP 请求/响应)不被延迟发送,降低延迟。对于交互性强的应用很重要。

启用sendfile(默认开启)

  • 文件数据直接从内核缓存发送到网络,绕过用户空间
  • 大幅提升静态文件传输性能(减少 CPU 拷贝)
http{...省略... sendfile on;tcp_nopush on;...省略...}

5.5 文件压缩ngx_http_gzip_module

启动该模块,使文件传输前进行压缩,提升传输效率。

准备实验材料,观察状态

# 上传大体积图片[root@Nginx Page_Home]# ll ddd.png-rw-r--r--1root root20586559Apr1215:10 ddd.png# 制作大体积文本文件[root@Nginx Page_Home]# vim cccc.txt[root@Nginx Page_Home]# ll cccc.txt-rw-r--r--1root root48480Apr1215:15 cccc.txt# 浏览器访问(开发者模式F12查看传输大小):http://172.25.254.44/ddd.png# 浏览器访问(开发者模式F12查看传输大小):http://172.25.254.44/cccc.txt

图片

文本文件

开启文件压缩模块

gzipon;gzip_http_version1.1;gzip_comp_level2;gzip_static on;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
[root@Nginx Page_Home]# vim /etc/nginx/nginx.confhttp{...省略...gzipon;# 开启 Gzip 压缩功能(动态压缩)gzip_http_version1.1;# 设置启用压缩的最低 HTTP 协议版本,(1.1可避免兼容问题)gzip_comp_level2;# 压缩级别,范围 1~9。2 表示一个折中值。数字越大压缩率越高(文件越小),但越消耗 CPU。级别 1 最快但压缩率低,级别 9 最慢但压缩率最高。生产环境常用 2~5。gzip_static on;# 开启静态预压缩支持。当存在同名的 .gz 文件(如 style.css.gz)时,Nginx 会直接发送预压缩好的文件,而不需要实时压缩。这能节省 CPU 资源,适合静态资源较多的网站。gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 指定哪些 MIME 类型的响应需要进行压缩。图片本身已经是压缩格式,再次压缩效果很小,反而浪费 CPU。一般不推荐对 jpeg/png/gif 开启 gzip。建议只保留文本类 MIME 类型。...省略...}# 再次测试# 浏览器访问(开发者模式F12查看传输大小):http://172.25.254.44/ddd.png# 浏览器访问(开发者模式F12查看传输大小):http://172.25.254.44/cccc.txt# 解决疑问:1.压缩包和图片类对象本身已经自带压缩功能,所以看起来跟没压缩效果是一样的2.本文压缩的效果好,48.7K->0.9K

5.6 页面缓存ngx_http_headers_module

**expires控制浏览器缓存,无缓存的话,每次访问服务器,均是全文传输。**开启缓存可以加速浏览网站。

expires# 默认关闭offadd_header add_trailer epoch# 强制不缓存max# 指定`Expires`的值为10年-1# 指定`Expires`的值为当前服务器的-1s,即缓存立即过期,效果同epoch固定值# 比如:30d 1h 10s ......off# 关闭默认缓存设置

可以设置在 http(全局,所有Nginx服务器),serve(单一站点/),location(特定路径)

因此,可以采用分级缓存策略

5.6.1 浏览器(默认)开启缓存
# 浏览器进行第一次访问(开发者模式F12查看传输大小):http://172.25.254.44/ddd.png

# 点击刷新,再次访问:状态码:200->304# 304-重定向至缓存传输大小: 20185KB->0.2KB#

5.6.2 浏览器手动关闭缓存

也可以使用无痕浏览,那个一直关闭缓存功能。

# 关闭之后,就进行正常传输,不使用缓存
5.6.3 手动开启Nginx服务器缓存(默认关闭)

如果浏览器禁用缓存,此功能将不起作用。

# 第1次访问:http://172.25.254.44/dlam.jpg --> 81.4kb

# 第2次访问:http://172.25.254.44/dlam.jpg --> 0.3kb

5.7 防盗链ngx_http_referer_module

log_format main'$remote_addr - $remote_user [$time_local] "$request"''$status $body_bytes_sent "$http_referer"''"$http_user_agent" "$http_x_forwarded_for"';# 日志格式中的http_referer是记录,访问点引用的URL。# 也就是超链接的上一级地址。通过这段地址,可以发现一种网络行为——盗链。非法盗链会影响站点的正常访问。通过http_referer模块可以控制这一点。防止非法盗链现象。

用于通过检查 HTTP 请求头中的Referer字段来防止资源(如图片、视频、文件)被其他网站盗用链接。

# 核心指令valid_referers none# 请求没有 Referer 头blocked# 有 Referer 但被防火墙或代理删除(不以 http:// 或 https:// 开头)server_names# 后续列举的域名作为合法来源string# 具体的域名或匹配模式(支持 * 通配符,也可用正则 ~)invalid_referer0合法Referer1非法Referer
5.7.1 盗链现象展示
5.7.1.1 自创网站,查看效果
[root@Nginx a]# vim /etc/nginx/conf.d/a.confserver{access_log /var/log/nginx/a.access.log main;listen80;server_name www.a.org;location /{root /a;index index.html;}}[root@Nginx ~]# mkdir /{a,b}[root@Nginx ~]# cd /a[root@Nginx a]# ll Haaland.png-rw-r--r--1root root543777Apr1217:25 Haaland.png[root@Nginx a]# vim index.html<imgsrc='Haaland.png'/>[root@Nginx a]# systemctl restart nginx# 物理机上边写本地hosts文件(这里将b的也顺便一写)"C:\Windows\System32\drivers\etc\hosts"172.25.254.44 www.a.org www.b.org# 浏览器访问 http://www.a.org/ 出现以下内容图片

[root@Nginx a]# vim /etc/nginx/conf.d/b.confserver{access_log /var/log/nginx/b.access.log main;listen80;server_name www.b.org;location /{root /b;index index.html;}}[root@Nginx b]# vim index.html<imgsrc='http://www.a.org/Haaland.png'/>[root@Nginx b]# systemctl restart nginx# 浏览器访问:172.25.254.

# 在日志中可以清晰的看见 http://www.b.org 盗链了[root@Nginx ~]# tail -f /var/log/nginx/a.access.log172.25.254.1 - -[12/Apr/2026:17:52:09 +0800]"GET / HTTP/1.1"20057"-""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36""-"172.25.254.1 - -[12/Apr/2026:17:57:55 +0800]"GET /Haaland.png HTTP/1.1"200537947"http://www.b.org/""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0""-"

5.7.1.2 盗链百度,查看效果
[root@Nginx ~]# vim /Page_Home/index.html<!DOCTYPE html><html><head><metacharset="UTF-8"><title>测试页面</title></head><body><ahref='https://www.baidu.com/'>百度是我写的,不信你点点看!</a></body></html># 浏览器访问:http://172.25.254.44 并点击测试

5.7.2 手动开启防盗链
[root@Nginx ~]# vim /etc/nginx/conf.d/a.conf[root@Nginx ~]# cat /etc/nginx/conf.d/a.confserver{access_log /var/log/nginx/a.access.log main;listen80;server_name www.a.org;location /{root /a;index index.html;valid_referers none *.a.org;if($invalid_referer){return403;}}}[root@Nginx ~]# systemctl restart nginx# 浏览器再次访问 http://www.b.org# 以下为实现的效果,成功!

# 这里补充一下我的新的index.html页面(直接生成即可)<!DOCTYPE html><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>欢迎页</title><style>:root{--bg:#0b0f19;--card-bg:#111625;--text-primary:#f8fafc;--text-secondary:#8b95a8;--accent:#3b82f6;--accent-hover:#2563eb;--border:#1e293b;--success:#10b981;}*{margin:0;padding:0;box-sizing: border-box;}body{font-family: -apple-system, BlinkMacSystemFont,"Segoe UI", Roboto,"Noto Sans SC", sans-serif;background-color: var(--bg);color: var(--text-primary);min-height: 100vh;display: flex;justify-content: center;align-items: center;position: relative;overflow: hidden;}/* 细线网格背景 */ body::before{content:"";position: absolute;inset:0;background-image: radial-gradient(circle at 1px 1px,#1e293b 1px, transparent 0);background-size: 28px 28px;opacity:0.35;z-index:0;}.container{position: relative;z-index:1;background: var(--card-bg);border: 1px solid var(--border);border-radius: 10px;padding:2.2rem1.8rem;max-width: 440px;width:90%;box-shadow:08px 24px rgba(0,0,0,0.45);animation: slideIn0.5s cubic-bezier(0.16,1,0.3,1);}@keyframes slideIn{from{opacity:0;transform: translateY(12px);}to{opacity:1;transform: translateY(0);}}.tag{display: inline-block;font-family:"SF Mono", Monaco,"Cascadia Code","Roboto Mono", Consolas, monospace;font-size:0.8rem;background: rgba(59,130,246,0.12);color:#60a5fa;padding:0.2rem0.5rem;border-radius: 4px;margin-bottom: 1rem;border: 1px solid rgba(59,130,246,0.25);letter-spacing:0.03em;}h1{font-size:1.75rem;font-weight:600;margin-bottom:0.4rem;letter-spacing: -0.01em;}p{color: var(--text-secondary);line-height:1.6;margin-bottom:1.6rem;font-size:0.95rem;}.btn{display: inline-flex;align-items: center;gap:0.4rem;padding:0.75rem1.6rem;background: var(--accent);color:#fff;text-decoration: none;border-radius: 6px;font-weight:500;font-size:0.9rem;transition: all0.18s ease;border: none;cursor: pointer;}.btn:hover{background: var(--accent-hover);transform: translateY(-1px);box-shadow:04px 10px rgba(59,130,246,0.3);}.btn:active{transform: translateY(0);}.status{margin-top:1.4rem;font-size:0.78rem;color: var(--text-secondary);display: flex;align-items: center;gap:0.45rem;font-family:"SF Mono", Monaco,"Cascadia Code","Roboto Mono", Consolas, monospace;}.status::before{content:"";width: 7px;height: 7px;background: var(--success);border-radius:50%;box-shadow:006px var(--success);}</style></head><body><divclass="container"><divclass="tag">devops-engineer</div><h1>欢迎, Kaser</h1><p>基础设施已就绪。服务状态正常,部署通道开放。<br>请根据需要进入控制台或执行初始化检查。</p><ahref="#"class="btn">进入控制台 →</a><divclass="status">system: online</div></div></body></html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 12:49:14

PPTist终极指南:5分钟掌握免费开源在线PPT制作工具

PPTist终极指南&#xff1a;5分钟掌握免费开源在线PPT制作工具 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for t…

作者头像 李华
网站建设 2026/4/14 12:49:03

如何快速上手ngx-charts:10分钟完成第一个图表

如何快速上手ngx-charts&#xff1a;10分钟完成第一个图表 【免费下载链接】ngx-charts :bar_chart: Declarative Charting Framework for Angular 项目地址: https://gitcode.com/gh_mirrors/ng/ngx-charts ngx-charts是一个基于Angular的声明式图表框架&#xff0c;通…

作者头像 李华
网站建设 2026/4/14 12:46:10

Wan2.1-umt5模型联邦学习初探:在保护数据隐私下的协同训练方案

Wan2.1-umt5模型联邦学习初探&#xff1a;在保护数据隐私下的协同训练方案 最近几年&#xff0c;大家应该都感受到了大模型的威力&#xff0c;从写文章到生成图片&#xff0c;能力越来越强。但一个现实问题也摆在了面前&#xff1a;很多最有价值的数据&#xff0c;比如医院的病…

作者头像 李华
网站建设 2026/4/14 12:43:30

终极指南:ReconnectingWebSocket 10个核心配置参数完全解析

终极指南&#xff1a;ReconnectingWebSocket 10个核心配置参数完全解析 【免费下载链接】reconnecting-websocket A small decorator for the JavaScript WebSocket API that automatically reconnects 项目地址: https://gitcode.com/gh_mirrors/re/reconnecting-websocket …

作者头像 李华
网站建设 2026/4/14 12:42:17

NSA2302 IIC总线驱动与传感器数据采集实战

1. NSA2302与IIC总线基础入门 第一次接触NSA2302微控制器时&#xff0c;我被它丰富的接口资源吸引住了。这款芯片内置的IIC控制器特别适合连接各种传感器&#xff0c;就像给智能设备装上了感知环境的神经末梢。IIC总线&#xff08;Inter-Integrated Circuit&#xff09;这种两线…

作者头像 李华
网站建设 2026/4/14 12:39:21

电动正铲液压挖掘机液压系统设计

摘 要 随着挖掘机市场的不断发展&#xff0c;电动正铲液压挖掘机的使用也越来越广泛。本文针对一种电动正铲液压挖掘机的液压系统设计进行了研究。首先对该型号挖掘机的基本结构和性能指标进行了分析&#xff0c;综合考虑其工作条件和需求&#xff0c;对液压系统的参数进行了设…

作者头像 李华