使用Nginx反向代理Prometheus时出现错误重定向的问题解决
解决Prometheus反向代理下的重定向路径问题
问题根源确实是Prometheus不知道自身的外部访问前缀,只需在启动时指定--web.external-url参数,就能让它生成带正确前缀的重定向链接。
步骤1:修改docker-compose中的Prometheus配置
更新你的prometheus服务定义,添加command参数指定外部访问路径为/prometheus/:
prometheus: image: prom/prometheus volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 添加启动参数指定外部URL command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.external-url=http://localhost/prometheus/' # 保持内部路由前缀为根路径,与Nginx代理规则匹配 - '--web.route-prefix=/' ports: - "9090:9090"
说明:
--web.route-prefix默认值就是/,如果Nginx已经将/prometheus/代理到Prometheus的根路径,这个参数无需修改。
步骤2:优化Nginx代理配置(可选但推荐)
为了让Prometheus正确识别客户端信息,建议在Nginx的location块中补充代理头:
server { listen 80; location /prometheus/ { proxy_pass http://prometheus:9090/; # 添加必要的代理头 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_set_header X-Forwarded-Proto $scheme; } }
步骤3:重启服务验证
执行命令重启docker-compose服务:
docker-compose down && docker-compose up -d
现在访问http://localhost/prometheus/,会正确重定向到http://localhost/prometheus/graph,所有内部链接也会自动带上/prometheus/前缀。
内容的提问来源于stack exchange,提问作者user1796624
相关产品推荐
相关产品推荐

