我正在寻找一个nginx配置设置,可以将Access-Control-Allow-Origin设置为在Origin中接收到的值。
似乎*方法不适用于Chrome,多个URL也不适用于火狐,因为CORS规范不允许这样做。
到目前为止,唯一的解决方案是将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;发布于 2015-03-18 12:06:05
使用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;
}
...
}发布于 2014-01-15 07:57:08
我开始自己使用它,这是我当前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";
}我计划在我自己的服务器上尝试这种技术,将允许的域列入白名单。
发布于 2021-10-14 13:42:26
这里是conf.f目录中的一个文件的一部分,人们总是在这里描述他们的虚拟主机Nginx。$http_origin与allowed_origins的列表进行比较,然后在第二个map块中,系统根据允许的列表决定写入“头访问-控制-允许-源”的内容。以下是代码的一部分。
#cat /etc/nginx/conf.d/omehost.conf
map $http_origin $origin_allowed {
default 0;
https://xxxx.yyyy.com 1;
https://zzz.yyyy.com 1;
}
map $origin_allowed $origin {
default "";
1 $http_origin;
}
server {
server_name somehost.com;
#...[skipped text]
add_header Access-Control-Allow-Origin $origin always;
#....[skipped text]
}我在我的服务器上测试了它。一切正常。祝你有愉快的一天&身体健康,尤金。
https://stackoverflow.com/questions/14499320
复制相似问题