如何在引荐来源的帮助下动态添加 Access-Control-Allow-Origin 规则?

如何在引荐来源的帮助下动态添加 Access-Control-Allow-Origin 规则?

我有几个不可预见的域名引用者,我想允许它们从我的服务器获取资源,同时也允许设置凭据。

我知道这有点愚蠢,违反了 W3C 的安全特性,但是每次有新域名想要请求资源时,我无法添加所有域名。

到目前为止我有一个位置块,我在其中添加了如下标题:

add_header 'Access-Control-Allow-Origin' $http_referer;

这很有效。几乎。当请求确实请求 Nginx 时,引荐来源始终以斜杠结尾。事实上,事实并非如此,域名无法获取资源。示例如下所示。url 为:http://example.com nginx 显示 $http_referer 是http://example.com/因此不允许访问资源,因为http://example.com不是http://example.com/

我怎样才能正确地替换引荐来源并省略没有...的尾部斜线?可能还有更复杂的引荐来源,包括路径等...

答案1

一种解决方案是使用 nginxmap功能。在 HTTP 级别,定义映射:

map $http_referer $alloworigin {
    ^(.+)/$ $1;
    ^(.+)[^/]$ $1;
    default "";
}

然后add_header您可以使用以下命令:

add_header 'Access-Control-Allow-Origin' $alloworigin;

这里对变量的map变换如下:$http_referer$alloworigin

  1. 如果$http_referer包含至少一个字符并且以 结尾/,则被/删除。
  2. 如果$http_referer包含至少一个字符并且不以结尾/,则复制整个字符串。
  3. 若没有$http_referer或者为空,$alloworigin则为空。

上面的数字与map线条相对应。

相关内容