Files
kefu/im/bchongw首页修复记录-2026-09-02.md
2026-09-03 08:38:17 +08:00

56 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# bchongw 首页故障修复记录
日期:2026-09-02
生产服务器:`47.106.181.28`
## 修复结果
`https://www.bchongw.com/` 与 `https://m.bchongw.com/` 已恢复正常访问。桌面站和移动站均通过服务器本机请求与外网请求验证。
## 故障原因
1. 桌面站首页静态缓存文件为 0 字节,Nginx 因此返回 HTTP 200,但页面没有内容。
2. 移动站首页缓存缺失,重新渲染时会调用站内下载数据接口。该接口通过公网域名回连本机,受到连接数限制与 WAF CC 计数影响,连接被重置后异常没有被兜底,ThinkPHP 最终返回 404。
3. 两个站点关闭了 ThinkPHP 模板缓存,每次请求都重复编译模板,放大了 PHP 与 MySQL 压力。
4. PHP 5.6 同时加载旧版 Zend Guard Loader,以及不适用于 Linux 的 Windows `.dll` 扩展配置,进程在压力下出现 `SIGBUS` 崩溃。
5. 桌面站首页模板包含三处 `ORDER BY RAND()` 型随机查询,会导致数据库额外排序和临时表开销。
6. 防火墙的 80/443 连接数限制没有排除环回接口,站点自己的接口调用也可能被当作外部高并发连接拒绝。
## 已实施的改动
- 为桌面站和移动站启用 ThinkPHP 模板缓存,并重建首页、模板及运行时缓存。
- 将移动站站点地址修正为 HTTPS。
- 将桌面站首页三处随机排序改为按发布时间倒序,避免全表随机排序。
- 重写两个站点的 `ff_mysql_down()` 站内调用:域名仅在本机解析到 `127.0.0.1`,增加连接/总超时,检查 HTTP 与 JSON 结果,并在接口异常时返回空数组,避免拖垮整个首页。
- 禁用 PHP 5.6 中无效的 Windows `.dll` 配置及旧 Zend Guard Loader;保留已经编译进 PHP 的 curl、gd、mysql、mysqli、pdo_mysql 模块。
- 扫描 7 个站点约 1.16 万个 PHP 文件,没有发现依赖 Zend Guard 或 ionCube 的加密代码。
- 为所有共用 PHP 5.6 的相关 ThinkPHP 站点启用模板缓存,随后完成并发访问验证。
- 在运行时 iptables 和 firewalld 永久规则中增加环回接口放行;外部 IP 的连接数限制保持不变。
- 在宝塔免费 WAF 中仅精确放行 `127.0.0.1` 和服务器自身公网 IP,并清除旧的 CC 临时封锁;普通访客继续经过全部 WAF 规则。
本次首页故障没有通过盲目增加数据库索引处理,因为故障链路的直接原因是空缓存、模板重复编译、随机排序、PHP 崩溃及本机回连被限流。
## 最终验证
| 检查项 | 结果 |
|---|---|
| 桌面站首页(外网) | HTTP 200,72,343 字节,约 0.22 秒 |
| 移动站首页(外网) | HTTP 200,28,724 字节,约 0.19 秒 |
| 桌面站首页(服务器本机) | HTTP 200,72,343 字节,约 0.02 秒 |
| 移动站首页(服务器本机) | HTTP 200,28,724 字节,约 0.03 秒 |
| 桌面站站内接口 | HTTP 200 |
| 移动站站内接口 | HTTP 200 |
| Nginx 配置检查及平滑重载 | 通过 |
| WAF SQL 注入探针 | HTTP 403,仍被拦截 |
| PHP 5.6 FPM | 正常运行;08:48:01 后未再记录 `SIGBUS` |
| 环回防火墙规则 | 运行时规则存在,永久规则已写入 |
验证时服务器负载为 `2.58 / 2.54 / 2.48`,可用内存约 2,049 MB。
## 回滚备份
- 首页与应用改造:`/www/backup/bchongw-home-fix-20260902-083204`
- WAF 白名单修改:`/www/backup/waf-local-whitelist-20260902-085445`
- PHP 5.6、模板缓存和防火墙改动的备份均保存在 `/www/backup/`,目录名前缀分别为 `php56-loader-fix-`、`php56-template-cache-fix-`、`firewall-loopback-fix-`。