更改Grafana的标题(Access-Control-Allow-Origin)

时间:2017-02-20 06:31:12

标签: php apache http-headers graphite grafana

我正在尝试在普通的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);重新启动后,没有任何变化......

我很困惑。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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"
     

请注意使用&#34; &#34;让你的石墨实例完全开放   可能想考虑使用&#34; http://my.grafana.com&#34;取代&#34; &#34;

     

如果您的Graphite网站受到基本身份验证的保护,您必须这样做   启用HTTP谓词OPTIONS。请注意,使用基本身份验证时   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