linux shell脚本自动检测http-gzip压缩是否启用,需三步:构造带accept-encoding: gzip的完整get请求→对比gzip与identity编码响应体大小并检查content-encoding头→失败时写日志、发邮件、写状态文件并校验服务存活。

在 Linux 中,用 Shell 脚本自动检测部署后是否正确启用了 HTTP-Gzip 压缩,关键不是“测压缩算法”,而是验证 Web 服务(如 Nginx/Apache)是否对常见文本资源(.html、.css、.js、.json)返回了 Content-Encoding: gzip 响应头,并在异常时及时预警。整个过程可拆解为三步:构造测试请求 → 解析响应头 → 判定+告警。
构造真实请求,模拟浏览器行为
别用 curl -I(只取 header),它可能绕过实际压缩逻辑;要用完整 GET 请求并显式声明接受 gzip:
- 用 curl -s -I -H "Accept-Encoding: gzip" 发起请求,加 -L 支持重定向(避免因跳转丢失 header)
- 目标 URL 应选静态资源路径,比如 https://your-app.com/style.css 或 https://your-app.com/api/health,确保该路径确实在服务端配置了 gzip 压缩
- 加 --connect-timeout 5 --max-time 10 防止网络卡顿导致脚本假死
精准提取并判定压缩状态
仅检查 Content-Encoding: gzip 不够——有些 CDN 或反向代理会返回 br(Brotli)或 deflate。更稳妥的方式是:
- 用 curl -s -o /dev/null -w "%{size_download}" -H "Accept-Encoding: gzip" $URL 获取压缩后响应体大小
- 再用 curl -s -o /dev/null -w "%{size_download}" -H "Accept-Encoding: identity" $URL 获取未压缩大小
- 若压缩后大小 明显更小(例如 gzip/
br/deflate,即视为有效启用
失败时触发多级预警
检测到未启用或压缩失效,不能只 echo 一句就结束:
- 写入本地日志:echo "$(date): GZIP check FAILED for $URL" >> /var/log/gzip-check.log
- 发邮件告警(需提前配置
mail或sendmail):echo "Gzip disabled on $HOSTNAME — check Nginx config & restart" | mail -s "[ALERT] HTTP Compression Down" ops@example.com - 写状态标记文件供监控系统轮询:echo "FAILED" > /tmp/.gzip_status,其他巡检脚本可读取该文件联动处理
不复杂但容易忽略:每次检测前建议先确认服务进程存活(systemctl is-active nginx >/dev/null),避免把“服务挂了”误判为“gzip没开”。











