Cookies Nginx e Cross Subdomain

2

TLDR: Como compartilhar cookies entre subdomínios de um servidor de aplicativos backend que eu não posso "configurar" usando o nginx como proxy - alguma combinação mágica de proxy _ *?

Um servidor da Web de tornado está sendo executado em "127.0.0.1:9999/ipython" que não posso configurar (ele está sendo executado como parte de um servidor de notebook ipython). Eu estou usando nginx para proxy de "www.mysite.com" para 127.0.0.1:9999 com sucesso (tráfego HTTP pelo menos).

No entanto, parte do aplicativo backend requer Websockets. Como estou usando CloudFlare, tenho que usar um domínio separado para Websockets ("Websockets estão disponíveis apenas para clientes corporativos ... Todos os outros clientes ... devem criar um subdomínio para Websockets em seu DNS CloudFlare e desabilitar o proxy CloudFlare" ). Estou usando o "ws.mysite.com".

Quando um usuário efetua login em "https: // www.mysite.com", um cookie é configurado pelo servidor da Web do tornado para "www.mysite.com" (não consigo configurá-lo, caso contrário, apenas configuraria para ".mysite.com"). Quando a parte do websocket do aplicativo entra em ação, ele envia uma solicitação para "wss: // ws.mysite.com", mas não consegue autenticar porque o cookie está definido para um domínio diferente ("www.meusite.com").

É possível para o nginx "falsificar" o domínio para que o servidor do tornado o registre como ".mysite.com"? proxy_cookie_domain não parece funcionar como eu esperaria ... Devo codificar "proxy_set_header Host"?

Eu estava pensando em um conf nginx parecido com ....

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;
    }
}

Eu tenho procurado no módulo nginx lua? Parece que você pode definir domínios de cookie, mas parece hackish ...

Agradecemos antecipadamente pela sua ajuda!

(Nota: tecnicamente tenho acesso à configuração do tornado, mas não há documentação sobre como definir o "domínio do cookie" para o servidor, por exemplo

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

    
por user309721 05.09.2015 / 18:19

0 respostas