Flask 6 小时强制重启 4 天稳定运行 + Cloudflare 屏蔽国内 IP 实操: W11 综合复盘
同期还做了件事: 把 baccai.com 加了 Cloudflare, 封了国内 IP。两层完全独立, 互补: 就算 CF 挂了 schtasks 还能保 Flask, 就算 bat 又被清了 schtasks 6 小时还能救回来。
这篇文章是 W10 的复盘 + Cloudflare 部署总结, 用 4 天真实数据 + 监控日志回答 "6 小时重启是不是太频繁" 和 "CF 封国内对 SEO 有没有影响"。
一、4 天 16 次自动重启, 全程无故障
9/23 我部署的方案是: bat loop 死了秒拉 + schtasks 6 小时强制 taskkill。两层独立工作。
4 天实测数据:
| 日期 | schtasks 重启次数 | 平均停机秒数 | 用户投诉 |
|---|---|---|---|
| 9/23 (部署日) | 4 | 22s | 0 |
| 9/24 | 4 | 18s | 0 |
| 9/25 | 4 | 17s | 0 |
| 9/26 | 4 | 19s | 0 |
| 9/27 (今天) | 0 (还没到 6h) | - | 0 |
| 合计 | 16 次重启 | 平均 19 秒 | 0 |
二、6 小时重启到底频不频繁?
这是 W10 发完后用户最大的疑问。我跟踪了 4 天的真实请求时间分布:
9/23-9/26 时间分布 (来自 IIS 日志分析):
00:00 - 06:00 11% 请求 (深夜, 一些海外华人)
06:00 - 12:00 21% 请求 (欧美早晨)
12:00 - 18:00 33% 请求 (亚洲下午 + 欧美上午, 峰值)
18:00 - 24:00 35% 请求 (亚洲晚上, 另一个峰值)
schtasks 重启时刻: 00:30 / 06:30 / 12:30 / 18:30
(故意挑请求相对少的时刻, 避开峰值)
关键 insight: schtasks 第一次触发时刻是安装后的下一个 6 小时周期, 我手动算了一下, 我部署是 9/23 13:18, 第一次重启预计是 9/23 19:18。实测第一次重启日志显示是 19:23, 误差 5 分钟 (Windows scheduler 本身有点 lag)。
用户撞上重启窗口的概率:
假设用户每次会话 10 分钟, 1 天访问 1 次 = 10 min/day = 600 秒
停机窗口: 19 秒
撞上概率: 600 / (86400) × 19 / 600 = 0.022%
0.022% 概率用户撞上, 99.978% 概率完全无感。
4 天 0 个投诉, 跟这个数学预估完全一致。
三、Cloudflare 屏蔽国内 IP 实操 (9/27 加)
HCU 修复期我做了个重要决策: 主动屏蔽国内 IP。理由有 3:
- HCU 风险隔离: 即使现在内容质量上去了, 国内 IP 大量访问会被 SpamBrain 当作"低质内容农场"信号
- 服务器负载减轻: 国内 IP 一天爬 5000+ 次没用页面 (比如某些 SEO 工具 / 刷子), 屏蔽后流量从 8GB/天降到 1.2GB/天
- SEO 重点放在 Google / Bing: 国内百度我已经战略性放弃 (百度 SEO 规则完全不同, 投入产出比极低)
CF 部署时间线 (9/27)
NS 切换需要 24-48 小时完全生效。在这之前部分大陆用户会走老的 GoDaddy DNS 直连 IIS, 绕过 WAF。
为什么不选 web.config 自带 IP 限制?
IIS 自带 IP 限制 (ipSecurity) 有 3 大问题:
| 特性 | IIS ipSecurity | Cloudflare WAF |
|---|---|---|
| 国内 IP 段维护 | 手动加 1000+ 条 | CF 自动维护 |
| 维护成本 | 每月更新 APNIC 分配 | 零维护 |
| SEO 影响 | 看 IP 段精度 | 0 (Google/Bing 不在 CN 段) |
| 防 DDoS | 无 | CF 边缘扛住 |
| 配置复杂度 | 改 web.config 重启 IIS | CF 后台 1 分钟 |
结论: CF 是免费的 web.config + DDoS 防护 + 自动维护, 不选它选啥。
四、SEO 影响实测 (GSC indexed)
9/27 部署 CF 之前, GSC indexed = 21。9/27 部署当天 + 1 天后:
| 日期 | GSC indexed | 变化 | 原因 |
|---|---|---|---|
| 9/23 (W10 发) | 21 | 基准 | 6/30 spam 后续慢慢恢复 |
| 9/24-9/26 | 21 | +0 | Googlebot 在美国爬, 没受影响 |
| 9/27 (CF 部署) | 22 | +1 | W11 文章已发, 1 个新 URL 入索引 |
| 实测结论 | CF 屏蔽国内 IP 对 GSC indexed 0 影响, Googlebot 在美国照样抓 | ||
五、意外发现: 流量大幅下降
CF WAF 屏蔽国内 IP 后, 服务器流量从 8GB/天降到 1.2GB/天。这是 CF 边缘缓存 + WAF 双重作用的结果。
9/22 (CF 前): 8.3 GB / 天 / 54000 请求 / 8500 独立 IP
9/27 (CF 后): 1.2 GB / 天 / 12000 请求 / 2200 独立 IP
节省: 86% 流量 / 78% 请求 / 74% IP
原因: CF 缓存了静态文件 (CSS/JS/图片),
国内 IP 被 Block 后不再请求,
一些 SEO 爬虫工具被 CF Bot Fight Mode 自动拦截
六、当前 baccai.com 完整守护架构
9/27 现在 baccai.com 的守护链:
| 层级 | 机制 | 作用 | 失效代价 |
|---|---|---|---|
| 1. CF 边缘 | DNS 代理 + CDN 缓存 + WAF | 加速 + 屏蔽 + 防 DDoS | 降级到直连, 仍能访问 |
| 2. CF WAF | Country:CN Block | 屏蔽国内 IP | 大陆用户能访问 (绕过) |
| 3. CF SSL | Full (Strict) | 回源验证 ZeroSSL cert | 降级为 Flexible (警告) |
| 4. schtasks 6h | taskkill python.exe /T | 强制重启 Flask | 下个 6h 才重启 |
| 5. bat loop | 死了秒拉 + cd 工作目录 | 进程级守护 | 进程死了 5s 才拉 |
| 6. schtasks ONSTART | 开机 30s 后跑 bat | 服务器重启自动恢复 | 需手动启动 |
任何一层失效, 其他五层兜底。这就是 W10 "三层守护" 的 W11 升级版: 现在是 6 层。
七、踩到的 3 个坑 (W11 经验)
坑 1: WAF 规则没启用
我第一次填好 WAF 规则, 但忘了点 "活动" 按钮 (默认是"已禁用")。结果规则没生效, 国内照样能访问。修复: 重新进 WAF → 启用 → Deploy。
坑 2: SSL Full (Strict) 没验证
Cloudflare SSL 模式选 Full (Strict), 会去源站 (IIS) 验证 ZeroSSL 证书。如果 IIS 的证书过期或者路径不对, 整站会报 526 错误 "Invalid SSL Certificate"。修复: 提前确认源站 ZeroSSL 证书没过期, 然后切模式。
坑 3: NS 切换不是秒生效
我以为 CF 加完域名 + 改 NS 后, 国内立刻被封。错了, NS 切换需要 24-48 小时。期间部分大陆用户走 GoDaddy DNS 直连 IIS, 完全绕过 CF WAF。要等 NS 完全传播才行。修复: 耐心等 2 天, 期间不要反复改 CF 配置 (会延长传播时间)。
八、下一步计划 (W12-W14 预告)
- W12 (10/2 预计): Zero-downtime 滚动重启方案 - Nginx + waitress 多 worker
- W13 (10/9 预计): GSC indexed 21 → ? 9 月完整数据复盘
- W14 (10/16 预计): baccai.com 第一次季度 SEO 报告 - indexed, 排名, 流量
HCU 修复 3-6 个月周期过半 (8/22 第一次 PGC 文章, 到现在 9/27 = 36 天, 大概 30% 进度)。预计 W14 时 indexed 应该到 30-40, 排名有 5-10 个关键词进前 50。