#!/bin/bash # 部署缓存头改动,并验证 Cloudflare 是否真的缓存了。 # # 关键疑问:Cloudflare 默认只缓存一批扩展名, # .exe / .zip / .apk **可能不在**默认列表里。 # 所以不能只看"我发了 Cache-Control"就算完, # 必须看响应头里的 cf-cache-status 有没有变成 HIT。 set -u BASE=https://relay.xxmxxs.top UA='LanRemote/1.8.1' echo "════════ 1. 重启中转让缓存头生效 ════════" systemctl restart lanremote-relay sleep 6 echo " 中转: $(systemctl is-active lanremote-relay)" curl -s --max-time 10 http://127.0.0.1:8080/v1/health | head -c 80 echo echo echo "════════ 2. 本机直连看缓存头(确认代码生效)════════" for p in "/" "/download/ykxmz-server-1.8.1.zip" "/download/ykxmz-setup-1.8.1.exe"; do echo " ── $p ──" curl -sI --max-time 15 "http://127.0.0.1:8080$p" 2>/dev/null \ | grep -iE '^HTTP|^cache-control|^content-length|^content-type' \ | tr -d '\r' | sed 's/^/ /' done echo echo "════════ 3. 等隧道恢复 ════════" for i in $(seq 1 20); do c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 12 -H "User-Agent: $UA" "$BASE/v1/health") printf " 第 %d 次: %s\n" "$i" "$c" [ "$c" = "200" ] && break sleep 3 done echo echo "════════ 4. 走公网看 cf-cache-status(关键)════════" echo " 对每个资源连打 3 次,看 MISS -> HIT" for p in "/" "/shot/pc-main.png" "/favicon.ico" \ "/download/ykxmz-server-1.8.1.zip" \ "/download/ykxmz-setup-1.8.1.exe" \ "/download/ykxmz-watch-1.8.1.apk"; do echo " ── $p ──" for i in 1 2 3; do hdr=$(curl -sI --max-time 30 -H "User-Agent: $UA" "$BASE$p" 2>/dev/null | tr -d '\r') st=$(echo "$hdr" | grep -i '^cf-cache-status' | awk '{print $2}') cc=$(echo "$hdr" | grep -i '^cache-control' | cut -d' ' -f2-) age=$(echo "$hdr" | grep -i '^age:' | awk '{print $2}') printf " 第 %d 次: cf-cache-status=%-8s age=%-6s cache-control=%s\n" \ "$i" "${st:-无}" "${age:-无}" "${cc:-无}" sleep 1 done done echo echo "════════ 5. 结论 ════════" echo " 如果 .exe/.zip/.apk 一直是 MISS/无,说明 Cloudflare 默认不缓存这些扩展名," echo " 需要在 Cloudflare 后台加一条 Cache Rule(我会给出具体配置)。"