【问题标题】:Change Grafana's headers (Access-Control-Allow-Origin)更改 Grafana 的标头(Access-Control-Allow-Origin)
【发布时间】:2023-03-16 09:26:01
【问题描述】:

我正在尝试在纯 PHP 页面中显示 Grafana 仪表板。我按照网站说明使用 oauth 进行身份验证。这是我的代码:

<?php 
$ch = curl_init();
$authorization = "Authorization: Bearer <myToken>";
curl_setopt_array(
    $ch, array( 
    CURLOPT_URL => 'url-to-my-dashboard',
    CURLOPT_HTTPHEADER => array('Content-Type: application/json' , $authorization),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPAUTH => "HTTP/1.1"
));

$output = curl_exec($ch);
?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <?php echo $output; ?>
    </body>
</html>

页面加载,我得到了 CSS...但我最终遇到了 404 错误。我发现 Grafana 的标头不允许这种操作:

Access to Font at 'http://xxxxx' from origin 'http://localhost'
has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost' is therefore not allowed access.

我很确定我需要配置这些标头:

Header set Access-Control-Allow-Origin "xxx"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"

问题是我不知道我应该在哪里做。我一直在寻找 Grafana(或我们使用的 Graphite)的 .htaccess 文件。我也尝试过修改 Apache2 conf 文件(/etc/apache2/apache2/conf);重启后,没有任何变化...

我很困惑。谁能帮帮我?

【问题讨论】:

  • 您的问题解决了吗?通过@JMeterDude

标签: php apache http-headers graphite grafana


【解决方案1】:

由于请求违反Same Origin Policy,阻止请求的是浏览器而不是 Grafana。对于 localhost,在不同端口上运行的两个网站被认为是两个不同的域。

您需要将 Grafana 服务器置于反向代理之后,以允许跨域资源共享 (CORS)。

使用文档链接描述此问题存在问题。

从描述 Apache 配置的文档(上面的链接)中摘录:

对于 Apache 2.x:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"

请注意,使用“”会使您的石墨实例完全打开,因此您 可能要考虑使用“http://my.grafana.com”代替“

如果您的 Graphite Web 受基本身份验证保护,您必须 启用 HTTP 动词选项。请注意,使用基本身份验证时 Access-Control-Allow-Origin 不得设置为通配符, 必须指定标头 Access-Control-Allow-Credentials。这看起来 对于 Apache,如下所示:

Header set Access-Control-Allow-Origin    "http://mygrafana.com:5656"
Header set Access-Control-Allow-Methods   "GET, OPTIONS"
Header set Access-Control-Allow-Headers   "origin, authorization, accept"
Header set Access-Control-Allow-Credentials true

<Location />
    AuthName "graphs restricted"
    AuthType Basic
    AuthUserFile /etc/apache2/htpasswd
    <LimitExcept OPTIONS>
      require valid-user
    </LimitExcept>
</Location>

这里有一个问题,描述了使用 Apache 为 Grafana 创建反向代理的配置:

https://github.com/grafana/grafana/issues/4136

如果这些链接没有帮助,Grafana 存储库中有很多关于此的已关闭问题。这里是搜索cors和apache:

https://github.com/grafana/grafana/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20cors%20apache

【讨论】:

  • 谢谢,我会试试这个,我告诉你
猜你喜欢
  • 2015-04-02
  • 2016-01-11
  • 2019-02-07
  • 2018-10-28
  • 2016-01-21
  • 2018-07-18
  • 2019-03-18
  • 2018-10-20
  • 2018-09-19
相关资源
最近更新 更多