#!/usr/bin/env bash # SEO 解封收尾脚本(default 混合文件专用,seo-unblock.sh v3 之后的最后一步) # 背景:/etc/nginx/sites-enabled/default 内含四个 server 块(dpanel/ms365/ddns 面板 + 博客主站), # 文件级脚本无法区分——本脚本按各自 server_name 精确锚定逐块处理。 # 作用:①三面板块补回 noindex ②博客块加 /admin/ 局部 ③nginx -t 通过才重载(失败回滚) # ④配置级终验(sudo nginx -T,不受 ESA 边缘缓存干扰) # 用法:sudo bash scripts/ops/seo-unblock-finish.sh (幂等,可重复跑) set -euo pipefail DEFAULT=/etc/nginx/sites-enabled/default BAKDIR=/tmp/seo-finish-bak-$(date +%s) echo "==== ① 现状(default 四块)====" grep -n "server_name" "$DEFAULT" | head -6 echo echo "==== ② 变更计划 ====" for h in dpanel ms365 ddns; do if grep -q "server_name $h.wait4x.online" "$DEFAULT"; then if sed -n "/server_name $h.wait4x.online;/,/}/p" "$DEFAULT" | grep -q "X-Robots-Tag"; then echo " [跳过] $h 已有 noindex" else echo " [补回] $h 块加 add_header X-Robots-Tag noindex always;" fi fi done if grep -q "location /admin/" "$DEFAULT"; then echo " [跳过] 博客块已有 /admin/ 局部" else echo " [新增] 博客块(server_name wait4x.online;)加 location /admin/ { noindex }" fi echo read -rp ">> 按计划执行?(y/N) " ok; [ "$ok" = "y" ] || { echo "已取消"; exit 0; } echo echo "==== ③ 执行 ====" mkdir -p "$BAKDIR" cp "$DEFAULT" "$BAKDIR/default" echo " 备份:$BAKDIR/default" for h in dpanel ms365 ddns; do if grep -q "server_name $h.wait4x.online" "$DEFAULT" && \ ! sed -n "/server_name $h.wait4x.online;/,/}/p" "$DEFAULT" | grep -q "X-Robots-Tag"; then sed -i "/server_name $h.wait4x.online;/a\\ add_header X-Robots-Tag noindex always;" "$DEFAULT" echo " 已补:$h" fi done if ! grep -q "location /admin/" "$DEFAULT"; then sed -i "/server_name wait4x.online;/a\\ location /admin/ { add_header X-Robots-Tag noindex always; }" "$DEFAULT" echo " 已加:博客 /admin/ 局部" fi echo echo "==== ④ 语法检查+重载(失败回滚)====" if ! nginx -t; then echo "!! nginx -t 失败,回滚" cp "$BAKDIR/default" "$DEFAULT" nginx -t && systemctl reload nginx echo "已回滚,把报错发给 research"; exit 1 fi systemctl reload nginx && echo " nginx 已重载" echo echo "==== ⑤ 配置级终验(权威口径)====" echo "-- 生效的 noindex 分布(server_name → 头/局部)--" nginx -T 2>/dev/null | grep -B2 "X-Robots-Tag" \ | grep -E "server_name|X-Robots|location /admin" | sed 's/^ *//' | sort -u | sed 's/^/ /' echo echo "-- 判定 --" BLOG_GLOBAL=$(nginx -T 2>/dev/null | sed -n '/server_name wait4x\.online;/,/^ server\|^}/p' | grep -c "X-Robots-Tag" ) ADMIN=$(nginx -T 2>/dev/null | grep -c "location /admin/") PANELS=$(for h in dpanel ms365 ddns; do nginx -T 2>/dev/null | sed -n "/server_name $h\.wait4x\.online;/,/}/p" | grep -c X-Robots; done | paste -sd+ | bc) echo " 博客块全局 noindex:$BLOG_GLOBAL(期望 0,仅 /admin/ 局部算正常时此处计 location 行)" echo " /admin/ 局部:$ADMIN(期望 ≥1) 三面板 noindex 合计:$PANELS(期望 3)" rm -rf "$BAKDIR" cat <<'EOF' ==== ⑥ 最后一步:ESA 控制台(手动)==== 1. 全站 purge:wait4x.online(边缘缓存里的旧 noindex 头还活着) 2. HTML 边缘缓存 TTL 调 ≤1 小时 3. 加规则:/artalk/api/* 绕过缓存 4. 顺带查 git.wait4x.online 的 522(源站健康/回源配置) 完成后把 ⑤ 的输出发 research:跑生产 Lighthouse 入档(预期 SEO 60→95+)。 EOF