Nginx不缓存跨域请求(CORS)

时间:2014-11-17 15:01:22

标签: ruby-on-rails nginx

我有rails应用程序和nginx。

nginx配置的部分内容:

http {
    ...
    proxy_cache_path /var/cache/nginx levels= keys_zone=cache:50m inactive=1d;
    ...
}

server {
    ...
    location @rails {
        proxy_pass http://rails_server;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_read_timeout 300m;

        proxy_cache cache;
        proxy_cache_valid 1h;

        set $proxy_hide_header 'Set-Cookie';

        proxy_hide_header $proxy_hide_header;
        proxy_ignore_headers "Cache-Control" "Expires";
    }
    ...
}

我有一个缓存跨域请求的问题。

直接打开url my_domain / data.js时会创建缓存文件。

当我使用ajax请求从my_domain / index.html打开url my_domain / data.js时,会创建缓存文件。

当我使用ajax请求从my_domain2 / index.html打开url my_domain / data.js时,缓存文件

在所有情况下,内容和http代码都可以。

1 个答案:

答案 0 :(得分:1)

问题出在rails(不在nginx中)。 Rails为跨域请求添加“Set-Cookie”标头,即使已经设置了cookie(我不知道为什么,也许它是rails bug)。 所以我的解决方案是:

proxy_ignore_headers "Set-Cookie";