nginx-ingress访问主域名下React应用报404,子域名路径访问正常
问题根因定位及排查方案
高概率触发原因
- 前端React应用内置的Nginx配置未绑定主域名
link8.in:大部分React镜像打包时会默认在Nginx配置中指定固定server_name,若仅配置了test.link8.in,主域名请求到达Pod后会匹配到Nginx默认虚拟主机,返回404 - 存在其他Ingress资源抢占主域名规则:集群内如果有其他Ingress配置了
host: link8.in或泛域名*.link8.in规则,会优先匹配到错误的后端服务 - 冗余的rewrite注解干扰规则匹配:当前Ingress配置的
nginx.ingress.kubernetes.io/rewrite-target和use-regex注解无实际作用,错误配置可能导致主域名路径匹配失效
分步排查操作
- 确认404返回来源
执行命令curl -v http://link8.in查看响应头:- 若
Server字段为nginx/1.21.x等标准Nginx标识,说明是前端Pod返回的404,优先检查前端Nginx配置 - 若
Server字段为nginx-ingress-controller,说明是Ingress层匹配失败,优先检查Ingress规则
- 若
- 检查是否存在冲突Ingress
执行kubectl get ingress -A | grep link8.in,确认只有你配置的这一个Ingress绑定了link8.in域名 - 验证前端Pod Nginx配置
进入前端Pod执行cat /etc/nginx/conf.d/default.conf,检查server_name配置,建议修改为server_name _;匹配所有域名,修改后重启Pod验证 - 清理冗余注解测试
删除Ingress配置中以下两个注解,重新apply配置验证:
nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /
内容的提问来源于stack exchange,提问作者Kushal Bhalaik
相关产品推荐
相关产品推荐

