模块一:ERR_CONNECTION_RESET 根因排查与修复(核心主线)
故障现象
- 间歇性打不开,报错
ERR_CONNECTION_RESET/PR_CONNECT_RESET_ERROR
- 集中在「保存/发布文章」那一刻,普通浏览基本正常
- 此前恢复要等好几分钟,后期缩短到「刷新一次就好」(说明在收敛)
排查历程(按时间线,外部 → 内核 → 应用层)
| 日期 | 排查项 | 结论 |
| 09-15 | CDN IP 访问限频、防盗刷、合并回源 | 已全部关闭,仍偶发 → 非 CDN 配置 |
| 09-15 | 腾讯云工程师(2次) | 确认源站 115.159.193.205 在回源时主动发 RST,影响 miss 请求 11.2%,问题在源站侧 |
| 09-15 | 宝塔 Nginx 防火墙 / limit 规则 | 未安装 / 站点无 limit 规则 → 排除 |
| 09-15 | PHP-FPM 池子 | max_children=100 不算小 → 排除 |
| 09-15 | Nginx 连接数 | worker_connections=51200 → 排除 |
| 09-15 | 负载 / iptables | load 0.24、ESTAB 37、iptables 仅宝塔默认 → 排除 |
| 09-15 | HTTP/2 回源 | 10:30 关闭后 5 小时仍犯 → 排除 |
| 09-15 | Nginx fastcgi_cache 混乱 | 日志实锤目录 unlink failed;关闭(CDN 已承担缓存,源站这层冗余增不稳) |
| 09-16 | 腾讯云轻量防火墙(安全组) | 全部纯放行规则、443 对全网开放、无限连 → 排除 |
| 09-16 | 内核层:conntrack | 818 / 262144 远未满 → 排除 |
| 09-16 | 内核层:backlog | SYN dropped 仅 6 → 排除 |
| 09-16 | reset_timedout_connection | 未开启 → 排除 |
🎯 真凶锁定:宝塔免费 Lua WAF(/www/server/free_waf)
证据(09-16 错误日志):
叠加满屏 lua udp socket read timed out(WAF 每请求向外发 UDP 查询且超时)。
崩溃机理:
Lua 线程一崩,Nginx 立刻 RST 断连 → 与「保存文章时 RESET、刷新一次就好」严丝合缝。
注意:之前 09-15 说「宝塔 Nginx 防火墙未安装」是漏看——面板开关指付费版;实际跑着的是 free_waf(面板侧边有 WAF 菜单),不在那个开关里。
✅ 修复动作(09-16 10:47 已落地)
- WAF 加载点:
/www/server/panel/vhost/nginx/free_waf.conf(含init_by_lua_file+access_by_lua_file+ 三块lua_shared_dict)
验证标准
- 保存文章不再 RESET + 错误日志无
attempt to compare number with nil→ 结案
- 回滚命令(万一出问题):
cp /www/server/free_waf/init.lua.bak.0916 /www/server/free_waf/init.lua && nginx -s reload
遗留(未解决,独立次要)
lua udp socket read timed out:WAF 向外发 UDP 查询超时,只慢不崩。下一步关掉 WAF 的远程信誉查询或换腾讯云边缘防护。
模块二:公众号采集文章 HTML 自动化清理
背景:采集公众号文章时,正文带大量
<section>结构壳 + 微信图片残留属性(data-src=mmbiz.qpic.cn、data-w、data-ratio、class=”rich_pages wxw-img”),导致 HTML 臃肿、编辑器混乱、暴露采集指纹、影响 SEO 卫生。
交付文件清单
| 文件 | 类型 | 作用 | 部署位置 |
jiu-section-to-p.php |
mu-plugin v1.1 | 保存时把 <section> 转 <p> |
/wp-content/mu-plugins/ |
jiu-wechat-img-clean.php |
mu-plugin v1.1 | 保存时清理图片 data-* / 微信类名 | /wp-content/mu-plugins/ |
batch-section-to-p.php |
一次性脚本 | 存量文章批量转(二合一) | /wp-content/jiu-price-import/,跑完即删 |
关键踩坑与修复
- section 插件 v1.0 导致文章页 403(上线即现,删掉恢复)
- 根因:v1.0 挂钩
the_content,每次前台渲染跑正则,长文触发 PCRE 上限 → 在 CDN 前显示 403
- 修复 v1.1:删掉前台钩子,只保留
content_save_pre(写库时转一次);加两道保险(正文 >20万字符跳过、正则失败原样返回)
- 根因:v1.0 挂钩
- 图片清理插件「前台干净但后台还有 data-*」
- 根因:v1.0 只挂
the_content渲染层,不改数据库,后台编辑器显示的是库里原始 HTML
- 修复 v1.1:增加
content_save_pre保存时清理写库,后台编辑器从此也干净
- 根因:v1.0 只挂
- 批量脚本升级为「二合一」:一次跑完 section→p + 图片清理
使用方式
模块三:安全加固提醒(来自日志观察)
- 站点正被全天候扫描攻击——日志满屏
/1.php、/eoffice10/.../u3pdf.php、/search.php?...print\id`(SQL注入)、/wp-register.php等Primary script unknown`。目前靠 free_waf 在挡,临时关 WAF 前务必确认腾讯云 CDN WAF 开着。
- 端口暴露风险:
8899(自动发文)、8888(phpMyAdmin)、20088(宝塔面板) 对全网开放。建议把 8888 / 20088 来源改成常用 IP。
- .well-known 探测:日志一堆
.well-known/*.json404,无害,可忽略或建空文件消解。
时间线速查
- 09-15:客户也遇 RESET → 腾讯云确认源站 RST → 排除防火墙/limit/PHP-FPM/Nginx连接数/负载/iptables/HTTP/2 → 关 fastcgi_cache → 完整 nginx 配置审计
- 09-16:排除安全组/内核层 → 锁定 free_waf Lua 崩溃(init.lua:421) → 打补丁修复 + reload 落地 → 公众号清理插件 v1.1 迭代(删前台钩子、保存时写库)
