NGINX反向代理/alertmanager返回404,但Pod内可直接curl端点
问题分析与解决方法
你的问题核心在于NGINX反向代理时的路径拼接错误,导致请求被转发到目标服务不存在的端点,进而返回错误提示。
问题原因
当前配置中,proxy_pass 使用了 $request_uri,会将客户端请求的完整路径(比如 /alertmanager)直接追加到目标服务地址后,最终转发的请求为:
http://mimir-distributed-alertmanager.mimir.svc.cluster.local:8080/alertmanager
但根据你的描述,直接访问目标服务根路径(http://mimir-distributed-alertmanager.mimir.svc.cluster.local)就能得到预期页面,说明目标服务的Alertmanager UI部署在根路径(/),而非 /alertmanager 路径。因此转发到 /alertmanager 会触发目标服务的「未配置」错误提示。
解决方法
修改 location /alertmanager 块的配置,让NGINX自动重写路径,将 /alertmanager 前缀去掉后转发到目标服务的根路径:
location /alertmanager { # 结尾的斜杠/是关键:NGINX会把/alertmanager替换为/转发到目标服务 proxy_pass http://mimir-distributed-alertmanager.mimir.svc.cluster.local:8080/; proxy_set_header X-Scope-OrgID 0; # 补充必要的转发头部,确保目标服务正确处理请求 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
配置说明
- 当
proxy_pass结尾带有/时,NGINX会将location匹配的前缀(/alertmanager)从请求路径中移除后再转发。例如:- 客户端请求
/alertmanager→ 转发到目标服务的/ - 客户端请求
/alertmanager/status→ 转发到目标服务的/status
- 客户端请求
- 补充的
Host、X-Real-IP等头部,用于让目标服务获取原始请求的相关信息,避免因头部缺失导致异常。
验证
修改配置后重启NGINX,再执行测试命令:
curl localhost:8080/alertmanager
此时应返回与直接访问目标服务根路径一致的页面。
内容的提问来源于stack exchange,提问作者Jeeves2022
相关产品推荐
相关产品推荐

