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

不同域名Nginx代理Grafana 9时面板提示“Origin not allowed”求助

解决Grafana 9通过Nginx代理跨域的"Origin not allowed"问题

问题背景

Grafana 9直接部署在domainA域名下,计划通过domainB域名搭建Nginx代理实现访问。按照社区帖子和官方文档配置Nginx后,虽能通过代理打开Grafana,但面板提示"Origin not allowed",添加标准CORS响应头后问题仍未解决。

当前Nginx配置

# 用于代理Grafana Live WebSocket连接
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

upstream grafana {
  server domainA;
}

server {
  listen 8080;
  server_name domainB;


  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host domainA;
    proxy_pass https://grafana-prj-sso-monitoring.apps.okd.svc.elca.ch;
  }

  # 代理Grafana Live WebSocket连接
  location /api/live/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host domainA;
    proxy_pass https://domainA;
  }
}

已添加的CORS头配置

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
add_header 'Access-Control-Allow-Credentials' 'true';

解决方案

1. 修正Grafana自身域名配置

Grafana会校验请求来源与配置的域名是否匹配,需修改grafana.ini配置文件:

[server]
root_url = https://domainB/
allow_embedding = true

[security]
allow_origin = https://domainB

如果用环境变量配置,对应设置:GF_SERVER_ROOT_URL=https://domainB/、GF_SERVER_ALLOW_EMBEDDING=true、GF_SECURITY_ALLOW_ORIGIN=https://domainB

2. 调整Nginx代理头设置

无需额外添加CORS头,重点修正代理传递的主机头和转发协议信息,确保Grafana能识别实际访问域名:

server {
  listen 8080;
  server_name domainB;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header Host $host; # 改为代理域名domainB
    proxy_pass https://domainA;
  }

  location /api/live/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header Host $host;
    proxy_pass https://domainA;
  }
}

核心原因:之前将Host头设为domainA,导致Grafana识别的请求域名和实际访问的domainB不匹配,触发跨域拦截;且Grafana会覆盖自定义添加的CORS头,所以额外加CORS规则无效。

3. 重启服务生效

  • 重启Grafana服务加载新配置
  • 重启Nginx应用代理规则变更

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:25:38