You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:46:04