Next.js TypeScript配合K8s NGINX Ingress特定路由返回502错误排查
排查步骤
- 先确认Next.js服务本身路由有效性
本地执行npm run build && npm run start后直接访问/login路由,确认代码层面路由可正常访问。再进入运行中的业务Pod,执行curl http://localhost:[服务端口]/login查看返回状态,如果容器内访问就异常,直接定位为Docker镜像或Next.js代码配置问题,和K8s上层链路无关。 - 排查Docker镜像配置问题
若使用Next.jsoutput: 'standalone'模式打包,确认Dockerfile中是否完整拷贝了.next/standalone、.next/static、public三个必要目录;检查是否配置了非根路径的basePath,与Ingress转发的根路径不匹配导致路由失效;确认启动命令未加多余的路径前缀参数。 - 排查K8s Ingress规则配置
检查Ingress的path匹配规则,确认/login前缀未被误匹配到其他不存在的后端服务;查看Ingress annotations中的重写规则,确认nginx.ingress.kubernetes.io/rewrite-target配置未将/login重写为不存在的路径。 - 排查NGINX Ingress运行日志
执行kubectl logs -n [ingress-controller命名空间] [ingress-controller pod名],搜索/login相关的请求日志,确认上游转发地址是否为正确的业务SVC地址:若日志显示上游返回502,问题定位在业务Pod侧;若Ingress侧主动返回502,检查是否配置的proxy-read-timeout等超时参数过短,无法匹配/login路由的服务端处理耗时。 - 额外排查Next.js中间件逻辑
确认middleware.ts中未对/login路由做特殊拦截逻辑,比如调用了不存在的内部服务、异常重定向导致服务端崩溃返回502。
内容的提问来源于stack exchange,提问作者César Desu
相关产品推荐
相关产品推荐

