首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据请求的Origin头部,将nginx Access-Control-Allow-Origin正确设置为响应头?

如何根据请求的Origin头部,将nginx Access-Control-Allow-Origin正确设置为响应头?
EN

Stack Overflow用户
提问于 2013-01-24 18:40:04
回答 3查看 42K关注 0票数 26

我正在寻找一个nginx配置设置,可以将Access-Control-Allow-Origin设置为在Origin中接收到的值。

似乎*方法不适用于Chrome,多个URL也不适用于火狐,因为CORS规范不允许这样做。

到目前为止,唯一的解决方案是将Access-Control-Allow-Origin设置为在源中接收的值(是的,可以实现一些验证)。

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

代码语言:javascript
复制
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;
EN

回答 3

Stack Overflow用户

发布于 2015-03-18 12:06:05

使用if有时会破坏其他配置,例如try_files。你可能会得到意想不到的404。

Use map instead

代码语言:javascript
复制
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;
    }
    ...
 }

If is evil

票数 45
EN

Stack Overflow用户

发布于 2014-01-15 07:57:08

我开始自己使用它,这是我当前Nginx配置中的这一行:

代码语言:javascript
复制
add_header 'Access-Control-Allow-Origin' "$http_origin";

这将设置一个标头,以允许请求的来源作为唯一允许的来源。所以你从哪里来都是唯一被允许的地方。因此,它应该与允许"*“没有太大区别,但从浏览器的角度来看,它看起来更具体。

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

代码语言:javascript
复制
if ($http_origin ~* (whitelist\.address\.one|whitelist\.address\.two)$) {
  add_header Access-Control-Allow-Origin "$http_origin";
}

我计划在我自己的服务器上尝试这种技术,将允许的域列入白名单。

票数 22
EN

Stack Overflow用户

发布于 2021-10-14 13:42:26

这里是conf.f目录中的一个文件的一部分,人们总是在这里描述他们的虚拟主机Nginx。$http_origin与allowed_origins的列表进行比较,然后在第二个map块中,系统根据允许的列表决定写入“头访问-控制-允许-源”的内容。以下是代码的一部分。

#cat /etc/nginx/conf.d/omehost.conf

代码语言:javascript
复制
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]
}

我在我的服务器上测试了它。一切正常。祝你有愉快的一天&身体健康,尤金。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14499320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档