我要寻找一个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;
使用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;
}
...
}
如果是邪恶
我开始使用这个自己,这是我目前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?