nginx请求的资源上没有'Access-Control-Allow-Origin'头信息

3

我发现有很多这样的问题,但是我没找到任何一个能够解决我的问题。

jQuery.post( 'http://example.com/api_offer/get_time_left', function(data) {

    console.log('get time');

}, 'json');

我在chrome控制台中看到了以下内容:

XMLHttpRequest无法加载http://example.com/api_offer/get_time_left。请求的资源上没有'Access-Control-Allow-Origin'头。因此,'[我的本地域名]'不被允许访问。

在nginx网站配置中设置了如下设置:

location ~ \.php$ {
              fastcgi_pass 127.0.0.1:9000;
              fastcgi_index index.php;
              include fastcgi_params;
              fastcgi_read_timeout 300;

              add_header Access-Control-Allow-Origin *;

              proxy_set_header Access-Control-Allow-Origin $http_origin;

        }

我正在使用Vagrant,如果这有关系的话。但是如果我在unix服务器上运行它,而不是在我的本地计算机上运行,我会得到同样的错误。
尝试查看nginx和该站点域的错误日志,但没有找到有用的信息。
如果我已经设置了*允许任何域名,为什么它不能工作?我还能做些什么呢?

请使用 example 域名来举例,domain.com 是一个真实的网站。你正在从 example.comexample.net 发送请求。你要编辑哪个网站的 nginx 配置? - Quentin
已更新至example.com。你为什么认为我在制作example.net?我正在编辑example.com的nginx配置文件。 - Dariux
你有一个托管在某个地方(“我的本地域名”)的网页。你有一个 API,它托管在另一个地方(“example.com”)。这两个站点都有 Web 服务器。你要编辑哪一个站点的 nginx 配置? - Quentin
好的,我明白了。我正在编辑“托管在其他地方的站点”的配置 - 这个站点是example.com。 - Dariux
1个回答

0

我编辑了错误的配置部分。

有两个服务器 {} 块。

其中一个是用于启用 ssl 的,另一个没有 ssl。

我正在编辑带有 ssl 部分。

server {
    liten 443;
    ssl on;


    ....

}

但我调用的是站点的非 SSL 部分,它没有反应。

唯一的问题可能是 - 我怎么能更早地检测到它。我花了几个小时在这上面。

因此,对于未来可能遇到此类问题的访问者 - 仔细检查,确保您正在编辑正确的块或 sites-enabled 文件


为什么不将整个内容都运行在 SSL 下,然后将未加密的流量重定向到它?性能几乎不会受到太大影响,而安全性(以及在这种情况下的简单性)的提升可以是巨大的。 - jonafato
C#程序存在问题,它同时也是一个本地主机服务器,因此它需要SSL,否则页面无法向C#程序发出请求,因为页面是安全的,而C#本地主机服务器不安全。这就是为什么我们需要两个域名的原因。也许可以使本地主机中的C#程序变得安全,但我们不是C#程序员,所以我们不会去碰它。C#程序连接到收银打印机。 - Dariux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接