5.Nginx服务WEB模块### 5.1 连接状态http_stub_statu_module状态页展示用户和Nginx链接数量信息状态页显示的是整个服务器的状态, 而非虚拟主机的状态5.1.1 查询是否安装[rootNginx ~]# nginx -V 21 | grep -o stub_statusstub_status5.1.2 启动状态模块# 此时浏览器访问 http://172.25.254.44/nginx_status# 会发现此时为 “404” -- 未启用此模块5.1.2.1 允许所有用户查看[rootNginx ~]# 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;# 允许所有人查看}}[rootNginx ~]# 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 等待的请求数 开启了Keepalived5.1.2.2 仅允许特定用户查看[rootNginx ~]# yum install -y httpd-tools[rootNginx ~]# htpasswd -cm /Page_Home/.htpasswd adminNew password: admin Re-type new password: admin[rootNginx ~]# ll /Page_Home/.htpasswd-rw-r--r--1root root44Apr1120:58 /Page_Home/.htpasswd[rootNginx ~]# cat /Page_Home/.htpasswdadmin:$apr1$nzWFN1jL$EevWAyfGm0HfJtAH5O6GE1# -c 参数表示创建Create一个新的密码文件。# -m 参数表示使用 MD5 加密算法对密码进行加密。# 请注意-c 是创建命令如果以后要添加第二个用户需要去掉 -c 参数否则会覆盖掉已有的 admin 用户[rootNginx ~]# 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_basicauth login;# HTTP基础验证人整体式auth_basic_user_file /Page_Home/.htpasswd;# 认证文件路径# allow xxxx 只能跟 单个IP/网段/all}}5.2 随机主页random_index_module微更新将主页设置成随机页面是一种微调更新机制5.2.1 模拟场景准备相关页面[rootNginx ~]# mkdir /app[rootNginx ~]# touch /app/{blue,green,red,.yellow}.html[rootNginx ~]# cat /app/.yellow.htmlhtmlheadtitleYellow Color/title/headbodystylebackground-color:yellowh1Yellow Color/h1/body/html[rootNginx ~]# cat /app/green.htmlhtmlheadtitleGreen color/title/headbodystylebackground-color:greenh1Green color/h1/body/html[rootNginx ~]# cat /app/red.htmlhtmlheadtitlered color/title/headbodystylebackground-color:redh1Red Color/h1/body/html[rootNginx ~]# cat /app/blue.htmlhtmlheadtitleBlue Color/title/headbodystylebackground-color:blueh1Blue Color/h1/body/html启动随机主页[rootNginx ~]# 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[rootNginx ~]# cp /app/.yellow.html /app/yellow.html[rootNginx ~]# systemctl restart nginx5.3 替换模块sub_module网页内容临时替换只能替换响应体不能替换响应头[rootNginx ~]# vim /Page_Home/index.htmlThe First Rich!The First Rich!开启替换模块Once[rootNginx ~]# vim /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;sub_filterFirstSecond;sub_filter_once on;location /{root /Page_Home;index index.html;}}# 浏览器访问 http://172.25.254.44# 为什么只有第一个First变成了Second[rootNginx ~]# vim /etc/nginx/conf.d/Page_Home.confserver{listen80;server_name172.25.254.44;sub_filterFirstSecond;sub_filter_once off;# 关闭Oncelocation /{root /Page_Home;index index.html;}}# 清除缓存或打开无痕模式浏览器访问 http://172.25.254.44 观察内容# 此时发现已经变了但是查看index.html文件会发现源文件并没有改动[rootNginx ~]# curl http://172.25.254.44/The Second Rich!The Second Rich![rootNginx ~]# cat /Page_Home/index.htmlThe First Rich!The First Rich!5.4 文件读取ngx_http_core_module[rootNginx ~]# 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启动该模块使文件传输前进行压缩提升传输效率。准备实验材料观察状态# 上传大体积图片[rootNginx Page_Home]# ll ddd.png-rw-r--r--1root root20586559Apr1215:10 ddd.png# 制作大体积文本文件[rootNginx Page_Home]# vim cccc.txt[rootNginx 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;[rootNginx 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.9K5.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.3kb5.7 防盗链ngx_http_referer_modulelog_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非法Referer5.7.1 盗链现象展示5.7.1.1 自创网站查看效果[rootNginx 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;}}[rootNginx ~]# mkdir /{a,b}[rootNginx ~]# cd /a[rootNginx a]# ll Haaland.png-rw-r--r--1root root543777Apr1217:25 Haaland.png[rootNginx a]# vim index.htmlimgsrcHaaland.png/[rootNginx a]# systemctl restart nginx# 物理机上边写本地hosts文件这里将b的也顺便一写C:\Windows\System32\drivers\etc\hosts172.25.254.44 www.a.org www.b.org# 浏览器访问 http://www.a.org/ 出现以下内容图片[rootNginx 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;}}[rootNginx b]# vim index.htmlimgsrchttp://www.a.org/Haaland.png/[rootNginx b]# systemctl restart nginx# 浏览器访问172.25.254.# 在日志中可以清晰的看见 http://www.b.org 盗链了[rootNginx ~]# tail -f /var/log/nginx/a.access.log172.25.254.1 - -[12/Apr/2026:17:52:09 0800]GET / HTTP/1.120057-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.1200537947http://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 盗链百度查看效果[rootNginx ~]# vim /Page_Home/index.html!DOCTYPE htmlhtmlheadmetacharsetUTF-8title测试页面/title/headbodyahrefhttps://www.baidu.com/百度是我写的不信你点点看/a/body/html# 浏览器访问http://172.25.254.44 并点击测试5.7.2 手动开启防盗链[rootNginx ~]# vim /etc/nginx/conf.d/a.conf[rootNginx ~]# 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;}}}[rootNginx ~]# systemctl restart nginx# 浏览器再次访问 http://www.b.org# 以下为实现的效果成功# 这里补充一下我的新的index.html页面直接生成即可!DOCTYPE htmlhtmllangzh-CNheadmetacharsetUTF-8metanameviewportcontentwidthdevice-width, initial-scale1.0title欢迎页/titlestyle: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/headbodydivclasscontainerdivclasstagdevops-engineer/divh1欢迎, Kaser/h1p基础设施已就绪。服务状态正常部署通道开放。br请根据需要进入控制台或执行初始化检查。/pahref#classbtn进入控制台 →/adivclassstatussystem: online/div/div/body/html