我有几个不可预见的域名引用者,我想允许它们从我的服务器获取资源,同时也允许设置凭据。
我知道这有点愚蠢,违反了 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
- 如果
$http_referer
包含至少一个字符并且以 结尾/
,则被/
删除。 - 如果
$http_referer
包含至少一个字符并且不以结尾/
,则复制整个字符串。 - 若没有
$http_referer
或者为空,$alloworigin
则为空。
上面的数字与map
线条相对应。