如何将CORS(交叉原始策略)添加到NGINX中的所有域?

时间:2016-02-03 10:34:08

标签: magento nginx cors jsonp font-face

我创建了一个用于提供静态文件(CSS,图像,字体和JS等)的文件夹。我最终会将该文件夹CNAME到一个子域中,以便在CDN上使用我的Magento 2设置。

我想允许所有域通过CORS进行所有访问 - 跨源策略,我也想缓存数据。这就是我所拥有的。 (我不是要求有关JSONP问题的安全建议或提示 - 我希望全局访问文件目录)

location /cdn-directory/ {

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2|zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "ALLOW-FROM *";
        expires +1y;
    }

}

根据documentationX-Frame-Options支持ALLOW-FROM uri,但无法看到使用*(所有域名)或在此ALLOW-FROM中添加某些多个域的示例。我需要允许所有域访问我的静态文件文件夹。

5 个答案:

答案 0 :(得分:4)

允许所有域嵌入资源(例如,在iframe等之内)是默认值,因此不需要额外的标头。

X-Frame-Options HTTP响应标头的唯一目的是防止外部网站将交互式资源嵌入iframe,因此如果您的意图是ALLOW-FROM *(确实不应该是一个有效的指令,如上所述),那么你应该完全省略整个标题,任何人都可以随心所欲地从任何域获得对你的静态资源的访问权。

答案 1 :(得分:3)

我没有尝试过我的nginx,但允许当前请求的来源在tomcat中运行:

add_header X-Frame-Options "ALLOW-FROM $http_origin";

答案 2 :(得分:3)

假设您实际上想要CORS(跨源请求共享)而不是仅仅嵌入iframe,配置将是:

location /cdn-directory/ {

    location ~* \.(js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header Access-Control-Allow-Origin: *
        expires +1y;
    }

}

答案 3 :(得分:3)

location /cdn-directory/ {

location ~* \.(js|css|swf|eot|ttf|otf|woff|woff2)$ {
    add_header 'Cache-Control' 'public';
    add_header 'X-Frame-Options' 'ALLOW-FROM *';
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    expires +1y;
  } 
}

http://enable-cors.org/server_nginx.html

答案 4 :(得分:0)

它可能有点过分,但我在CORS的Magento 1.8.x安装上使用了以下标题:

add_header 'Access-Control-Allow-Origin' "*";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';