如何正确设置nginx的访问控制允许来源为响应头基于来自请求的Origin标?(How to pro

2019-07-18 15:26发布

我要寻找一个nginx的配置设置,做了设置Access-Control-Allow-Origin在收到的价值Origin

如此看来, *因为它不是由CORS规范允许的方法不适用于Chrome和多个URL工作不与Firefox浏览器。

到目前为止,唯一的解决办法是先设置Access-Control-Allow-Origin在原点接收到的值(是一些验证可以实现)。

现在的问题是如何做到这一点的nginx的,最好是无需安装额外的扩展。

set $allow_origin "https://example.com"
# instead I want to get the value from Origin request header
add_header 'Access-Control-Allow-Origin' $allow_origin;

Answer 1:

使用if有时会破坏其他配置如try_files 。 你可以用意想不到404结束。

使用地图,而不是

map $http_origin $cors_header {
    default "";
    "~^https?://[^/]+\.example\.com(:[0-9]+)?$" "$http_origin";
}

server {
    ...
    location / {
        add_header Access-Control-Allow-Origin $cors_header;
        try_files $uri $uri/ /index.php;
    }
    ...
 }

如果是邪恶



Answer 2:

我开始使用这个自己,这是我目前Nginx的配置行:

add_header 'Access-Control-Allow-Origin' "$http_origin";

这将设置一个首部,以允许请求作为只允许原点的原点。 所以,在任何你从哪里来是允许的唯一的地方。 所以它不应该是不是让很多不同的“*”,但它看起来从浏览器的角度来看,更具体。

此外,您可以使用条件逻辑在Nginx的配置指定主机名的白名单允许。 下面是一个例子https://gist.github.com/Ry4an/6195025

if ($http_origin ~* (whitelist\.address\.one|whitelist\.address\.two)$) {
  add_header Access-Control-Allow-Origin "$http_origin";
}

我打算尝试在我自己的服务器添加到白名单中允许域这种技术。



文章来源: How to properly setup nginx Access-Control-Allow-Origin into response header based on the Origin header from the request?