为nginx和乘客

时间:2016-01-06 15:52:49

标签: nginx cors passenger

我有一个使用Angular的Rails应用程序。我正在使用nginx和乘客作为服务器。想法是angular向api.app.com发出请求。当我尝试这样做时,我得到了这个错误。

  

XMLHttpRequest无法加载https://api.app.com/api/some_resource。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“https://www.app.com”访问。响应的HTTP状态代码为404。

我当前的nginx配置以这种方式处理CORS请求:

server {
    location / {
        set $cors '';

        if ($http_origin ~* 'https?://(localhost|www\.app-staging\.com|www\.app\.com|api.app.com|app.com)') {
            set $cors 'true';
        }

        proxy_set_header Host $http_host;

        if ($cors = 'true') {
            add_header 'Access-Control-Allow-Origin' "$http_origin";
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
            #add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqTok$
        }
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在使用'包装匹配,这不是必需的。另外,请记住.是正则表达式中的特殊值。

if ($http_origin ~* (localhost|www\.app-staging\.com|www\.app\.com|api\.app\.com|app\.com)) {
  set $cors 'true';
}

请记住在更改后重新启动服务器或重新加载配置。