【问题标题】:NGINX proxy not setting session cookieNGINX 代理未设置会话 cookie
【发布时间】:2020-11-27 06:26:52
【问题描述】:

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

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

将我的/etc/hosts 设置为域名:api.todos.test 用于 Rails,todos.test 用于 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 中做错了吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 你有例子吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 会话 cookie 是 httpOnly。我发现了这个问题。很快就会发布。
    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 2012-02-27
    • 2020-11-27
    • 2015-02-26
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多