NGINX代理未设置会话cookie

时间:2020-08-06 23:05:20

标签: ruby-on-rails google-chrome vue.js nginx nuxt.js

我有一个Rails应用程序作为API,有一个Nuxt.js(Vue.js)应用程序作为前端客户端。

我目前在本地为他们服务。 Rails在端口3000上运行,Nuxt.js在端口4000上运行

将我的/etc/hosts设置为域名:api.todos.test for Rails和todos.test for Nuxt.js

我的NGINX配置为:

upstream rails_api {
  server 127.0.0.1:3000;
}

server {
    listen       80;
    listen       [::]:80;
    server_name  ~^(?<subdomain>.+)\.todos.test;

    location ~ ^/rest/ {
        proxy_pass http://rails_api;
        proxy_set_header Real-IP       $remote_addr;
        proxy_set_header Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header NginX-Proxy   true;
        proxy_set_header Host          $subdomain.todos.test:3000;
        proxy_pass_header Set-Cookie;
        proxy_redirect off;
    }

    location / {
        proxy_pass http://todos.test:4000;
        proxy_set_header Real-IP $remote_addr;
        proxy_set_header Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header NginX-Proxy true;
        proxy_set_header Host        $host;
        proxy_redirect off;
    }
}

我能够同时击中两台服务器,因此NGINX正在处理代理。我的Rails API返回带有Set-Cookie: _session_id=...的响应,但是由于某些原因,它从未在Chrome中设置。

我在NGINX中做错什么了吗?

2 个答案:

答案 0 :(得分:0)

您是否将XHR请求发送到该Rails API?

出于安全原因,浏览器无法像从ajax请求中接收到的那样访问第三方cookie。

您可以手动获取/设置Cookie。 请参考这个问题。 How to get a cookie from an AJAX response?

答案 1 :(得分:0)

似乎在使用NGINX(或任何反向代理)时,从服务器发送cookie时,有必要在cookie中设置domain