博客 AI 助手“无回复”根因:反代网关地址缓存过期导致 502

952 字
5 分钟
博客 AI 助手“无回复”根因:反代网关地址缓存过期导致 502

博客 AI 助手“无回复”的完整排查记录:根因不是服务崩溃、也不是会话丢失,而是 Nginx 反向代理在后端容器重建后仍沿用缓存中的旧地址向服务端转发,导致网关错误(502)。修复方式是借助容器网络内置 DNS + 变量转发,让网关每次请求都重新解析后端容器名,从而在约 10 秒内自动跟上容器地址变化,从根上消除这一整类问题。

问题#

博客页面的 AI 助手平时正常,某天突然“一直弹提示、问什么都不回复”,同一批老对话也续不上。客户端始终拿不到访问令牌,任何对话请求都无响应。

根因#

前端每次发 Coze 消息前,先向后端网关请求一次访问令牌(POST /api/coze/token/init)。这一步被网关以 502 拒绝。真正根因不是后端崩溃、不是内存耗尽、也不是会话/刷新逻辑,而是 Nginx 反向代理的【上游地址缓存过期】。

Nginx 在启动或重载的那一刻,会把后端容器名一次性解析成内网地址并缓存下来。本次把后端从单体拆成独立容器(微服务拆分)后触发了容器重建,容器拿到新地址;但 Nginx 仍拿着缓存里的旧地址去连接。旧地址此刻已被另一个容器占用、且对应服务的监听端口也变了,于是连接被拒、向上游抛 502。后端应用本身完全健康,直连容器地址仍返回 200。

修复方案#

让 Nginx 改成“每次请求都重新解析”的方式:在配置顶层启用容器内网 DNS 解析器,并把各后端反代入口从“固定上游”改为“变量转发”。

# 容器网络内置 DNS(127.0.0.11),供变量 proxy_pass 每次请求重新解析
resolver 127.0.0.11 valid=10s ipv6=off;
location /api/coze/ {
# 变量形式转发 → 每次请求都经内网 DNS 解析容器名
set $coze_upstream http://coze-gateway:8080;
proxy_pass $coze_upstream;
}

关键点:必须用「变量 proxy_pass + resolver」;server … resolve(upstream 自动解析)是 Nginx Plus 才有的能力,开源版 Nginx(nginx:alpine)只能走这套。容器重建换 IP 后,网关约 10 秒内自动跟上,无需任何手工重载。对每个需要转发到后端容器的入口都做同样处理;一些独立、负载小、极少重建的入口(如私有包仓库)保持原有写法不动。

如何应用#

  1. 修改网关配置模板(server/nginx/default.conf.template):顶层加 resolver,各后端反代入口改成变量 proxy_pass。
  2. 渲染后用临时容器校验(nginx -t)。注意:校验容器必须挂到容器网络,否则解析不到尚在用的旧内联上游,会误报“找不到主机”——那是校验环境限制,不是配置问题。
  3. 先备份现有配置再替换,之后重启网关容器。因替换会生成新的文件节点,需【重启而非仅重载】才能让新配置生效。
  4. 验证:POST /api/coze/token/init 返回 200;首页 200;未带每日 JWT 的 POST /api/dify/chat 返回 401(说明已路由到 Dify 网关而非错上游)。

一条小坑#

发布到 Astro 时,若 frontmatter 的 tags 序列里写到裸数字(如 502),会被 YAML 强转成 number,而 posts 集合 schema 要求 tags 全为 string,构建会报 InvalidContentEntryDataError。需要加引号写成 "502"。

总结#

这条路径从 2026 年 9 月 7 日实测通过,彻底消除了容器重建导致的网关地址漂移 502。核心价值是把“地址缓存过期导致网关错误”这一整类问题从根上解决,同时不引入手工重启或重载的运维负担。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
博客 AI 助手“无回复”根因:反代网关地址缓存过期导致 502
https://www.sanyablog.cn/posts/nginx-stale-upstream-502-fix-20260907/
作者
Sanya
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Sanya
Hello, I'm Sanya.
公告
本博客为 Vibe Coding 试验田 —— 所有文章、功能、设计均由 AI 辅助编程完成。这里记录着我的探索与踩坑,欢迎一起交流。
分类
标签
站点统计
文章
11
分类
4
标签
41
总字数
12,441
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录

hi~请问有什么问题吗?