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

配置Nginx反向代理后Grafana与Prometheus无法加载排查求助

问题:Nginx反向代理后Grafana和Prometheus无法通过HTTPS URL访问

我在Ubuntu系统用Docker部署了Grafana(3000端口)和Prometheus(9090端口),原本能通过IP+端口的HTTP方式正常访问。配置Nginx做反向代理实现HTTPS加密后,这两个服务无法通过加密URL加载,求排查解决。

运行Prometheus的Docker命令

sudo docker run -d --user 998:998 --net=host -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /data/prometheus:/data/prometheus prom/prometheus --config.file="/etc/prometheus/prometheus.yml" --storage.tsdb.path="/data/prometheus"

当前Nginx配置

server {
    server_name www.mydomain.com;
    root /var/www/html;

    #server_tokens off;   
    index index.html index.htm;        
    location / {         
        # First attempt to server request as file, then         
        # as directory, then fall back to displaying a 404.           
        try_files $uri $uri/ /index.html =404;      
    }

    location /prometheus {
                proxy_pass http://localhost:9090;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                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;
                proxy_cache_bypass $http_upgrade;

    }
    location /grafana {
                proxy_pass http://localhost:3000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                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;
                proxy_cache_bypass $http_upgrade;
    }
    location /node_exporter {
                proxy_pass http://localhost:9100;
    }

    # Access and error logs
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

排查与解决步骤

1. 修正Nginx反向代理路径映射

当前配置中location /prometheus和location /grafana的proxy_pass末尾未加斜杠,会导致请求路径拼接错误。比如访问https://www.mydomain.com/prometheus时,Nginx会转发到http://localhost:9090/prometheus,但Prometheus的根路径是/,因此无法匹配资源。

修改后的Nginx配置片段:

location /prometheus/ {
    proxy_pass http://localhost:9090/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    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;
    proxy_cache_bypass $http_upgrade;
}

location /grafana/ {
    proxy_pass http://localhost:3000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    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;
    proxy_cache_bypass $http_upgrade;
}

注意:location和proxy_pass末尾都要添加斜杠,确保路径正确映射。

2. 配置Grafana的子路径访问

Grafana需要明确自己被代理的路径,否则静态资源、API请求会走错误路径。

  • 若挂载了Grafana配置文件,修改grafana.ini:
[server]
root_url = https://www.mydomain.com/grafana/
serve_from_sub_path = true
  • 若用Docker环境变量传递配置,重启Grafana容器时添加参数:
sudo docker run -d --net=host -e GF_SERVER_ROOT_URL=https://www.mydomain.com/grafana/ -e GF_SERVER_SERVE_FROM_SUB_PATH=true grafana/grafana

3. 配置Prometheus的外部访问URL

Prometheus需要设置外部URL,避免页面内链接跳转错误。修改prometheus.yml添加:

global:
  external_labels:
    monitor: 'my-monitor'
external_url: 'https://www.mydomain.com/prometheus/'
# 其余原有配置保留

修改后重启Prometheus容器:

sudo docker restart <prometheus-container-id>

4. 补全Nginx的HTTPS基础配置

确保Nginx配置包含SSL证书相关设置,否则HTTPS访问本身会失败:

server {
    listen 443 ssl;
    server_name www.mydomain.com;
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;
    
    # 原有location配置...
}

# 可选:将HTTP请求强制重定向到HTTPS
server {
    listen 80;
    server_name www.mydomain.com;
    return 301 https://$host$request_uri;
}

5. 验证配置并重启服务

  • 检查Nginx配置语法:
sudo nginx -t
  • 重载Nginx配置:
sudo nginx -s reload
  • 重启Grafana和Prometheus容器,确保新配置生效。

6. 查看日志定位问题

若仍无法访问,检查以下日志获取具体错误信息:

  • Nginx错误日志:/var/log/nginx/error.log
  • Grafana日志:sudo docker logs <grafana-container-id>
  • Prometheus日志:sudo docker logs <prometheus-container-id>

内容的提问来源于stack exchange,提问作者Musharraf Shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:43:12