Nginx在子域之间共享Cookie而无法访问后端

时间:2015-09-04 21:44:16

标签: cookies nginx lua tornado ipython-notebook

TLDR:如何在后端应用程序服务器的子域之间共享cookie,我无法配置"使用nginx(1.8.x)作为代理 - 一些神奇的代理组合_ *?

龙卷风网络服务器正在" 127.0.0.1:9999 / ipython"我无法配置(它作为ipython笔记本服务器的一部分运行)。我使用nginx代理来自" www.mysite.com"到127.0.0.1:9999 成功(至少是http流量)。

但是,后端应用程序的一部分需要Websockets。因为我正在使用CloudFlare,所以我必须为Websockets使用单独的域(" Websockets目前仅适用于Enterprise客户......所有其他客户......应在其CloudFlare DNS中为Websockets创建子域并禁用CloudFlare代理")。我正在使用" ws.mysite.com"。

当用户登录" https:// www.mysite.com"时,龙卷风网络服务器为" www.mysite.com"设置cookie。 (我似乎无法对其进行配置,否则我只需将其设置为" .mysite.com")。当应用程序的websocket部分启动时,它会向" wss:// ws.mysite.com"发送请求,但无法进行身份验证,因为cookie是针对不同的域设置的(" www.mysite.com"。)

nginx是否有可能欺骗"域名所以龙卷风网络服务器注册了" .mysite.com"? proxy_cookie_domain似乎没有工作,因为我期待......我应该硬编码" proxy_set_header Host"?

我在考虑类似于......的nginx conf。

upstream ipython_server {
    server 127.0.0.1:8888;
}

server {
    listen 443;
    server_name www.mysite.com;

    ssl_certificate cert.crt;
    ssl_certificate_key cert.key;
    ssl on;

    # **** THIS DOESN'T WORK ??? ****
    proxy_cookie_domain www.mysite.com .mysite.com;

    location /ipython/static {
        proxy_pass https://ipython_server$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /ipython/api/sessions {
        proxy_pass https://ipython_server$request_uri;
        proxy_set_header Host $host;
        proxy_set_header Origin "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /ipython {
        proxy_pass https://ipython_server$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location / {
            try_files $uri $uri/ =404;
    }
}

server {
    listen 443;
    server_name ws.azampagl.com;

    ssl_certificate cert.crt;
    ssl_certificate_key cert.key;
    ssl on;

    # **** THIS DOESN'T WORK ??? ****
    proxy_cookie_domain ws.mysite.com .mysite.com;

    # This is the websocket location
    location /ipython/api/kernels/ {
        proxy_pass https://ipython_server$request_uri;

        proxy_redirect off;
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_buffering off;
        proxy_read_timeout 86400;

        proxy_set_header Host $host;
        proxy_set_header Origin "";
        proxy_set_header Upgrade websocket;
        proxy_set_header Connection "upgrade";

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

我一直在寻找nginx lua模块吗?看起来你可以设置cookie域,但它看起来很糟糕......

非常感谢您的帮助!

(附注:我在技术上可以访问龙卷风配置,但是没有关于如何为服务器设置" cookie域"的文档。即

c.NotebookApp.tornado_settings = {'cookie_domain????':'.mysite.com'}

0 个答案:

没有答案