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

Docker中Nginx代理Grafana报502 Bad Gateway问题求助

问题分析与解决步骤

这个502 Bad Gateway错误的根源很明确——你在Nginx配置里用了127.0.0.1:3000作为上游地址,但在Docker Compose环境中,每个容器都有独立的网络栈,Nginx容器里的127.0.0.1仅指向自身,根本访问不到运行Grafana的另一个容器。

Docker Compose默认会为所有服务创建专属网络,并且服务名可以直接作为DNS域名解析到对应容器的IP,我们只需要调整几个配置就能解决问题:

1. 更新Nginx配置文件 (nginx.conf)

把proxy_pass的地址从http://127.0.0.1:3000/改成http://grafana:3000/,修改后的完整配置如下:

events { worker_connections 1024; }
http {
  ssl_certificate /etc/ssl/cert.pem;
  ssl_certificate_key /etc/ssl/key.pem;
  server {
    listen 443 ssl;
    server_tokens off;
    location /grafana/ {
      rewrite /grafana/(.*) /$1 break;
      # 改用Grafana的服务名作为上游地址,Docker会自动解析到对应容器
      proxy_pass http://grafana:3000/;
      proxy_redirect off;
      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_bind $server_addr;
    }
  }
}

2. 优化Docker Compose配置(可选但推荐)

当前Grafana服务暴露了3000:3000端口到宿主机,如果你只打算通过Nginx反向代理访问Grafana,完全可以移除这个端口映射,避免Grafana直接暴露在公网中,提升安全性。修改后的docker-compose.yml如下:

version: '3.1'
services:
  nginx:
    image: nginx
    ports: ['443:443',"80:80"]
    restart: always
    volumes:
      - ./etc/nginx.conf:/etc/nginx/nginx.conf:ro
      - /home/ec2-user/certs:/etc/ssl
  grafana:
    image: grafana/grafana
    restart: always
    # 移除不必要的公网端口映射
    # ports: ["3000:3000"]

3. 重启服务生效

执行以下命令重启Docker Compose服务,让配置生效:

docker-compose down && docker-compose up -d

验证

重启完成后,访问https://1.1.1.1/grafana应该就能正常进入Grafana界面了。如果还有问题,可以查看日志进一步排查:

# 查看Nginx容器日志
docker-compose logs nginx

# 查看Grafana容器日志
docker-compose logs grafana

内容的提问来源于stack exchange,提问作者Mr 123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:57:39