我正在尝试编写一个可以同时在http和https上处理两个站点的nginx配置,只要客户端从未访问过两个站点,它似乎就可以工作,但是如果这样做的话,则存在缓存/跨站点问题。
# Allow cross origin
location ~* \.(eot|svg|ttf|woff|woff2|json)$ {
if ($http_origin ~* (https?://(admin\.)?example\.com(:[0-9]+)?)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我加载example.com,则一切正常,但是当我加载admin.example.com时,会遇到类似问题
(索引):1 XMLHttpRequest无法加载 http://origin.example.com/js/data-lib/currency.json。“ Access-Control-Allow-Origin”标头具有值“ http:// example”。com”不等于提供的来源。来源'http:// admin。例子 因此,不允许访问“ com”。
据我所知,这是因为浏览器将原始请求及其附带的标头缓存了起来,现在,即使来自服务器的另一个请求允许它,它也拒绝了我。证明是,如果我在Chrome开发者工具中选中了“禁用缓存”,则该问题将永远不会发生。
我该如何解决这个问题?是否可以在一个配置中同时完成多个域+ ssl / http,还是有必要根据请求的域和协议将其拆分?
(对我示例中的可怕空间感到抱歉,显然,StackOverflow认为我在编写示例时试图发布链接)