Como evito que o nginx descasque cookies seguros?

1

Estamos definindo o secure sinalizador em nossos cookies e o nginx está se recusando a transmiti-los porque está se comunicando com ele por HTTP.

Isso é perfeitamente compreensível, já que esse é o comportamento esperado. No entanto, na frente do nginx, executamos um Balanceador de Carga Clássico (anteriormente conhecido como o Elastic Load Balancer), que aceita o tráfego HTTPS da Internet e fala com o nginx em nossa rede interna via HTTP.

Então, existe uma maneira de dizer ao nginx para não remover os cookies, já que a conexão geral é confiável?

    
por Der Hochstapler 16.08.2016 / 15:53

2 respostas

1

Tudo bem, antes de tudo, quando você está depurando um problema "estranho" com sessões baseadas em cookie HTTP, certifique-se de verificar se o cabeçalho Set-Cookie apropriado é enviado pelo servidor!

Quando você estabelece que não está sendo enviado (como eu), você vai querer definir a variável de ambiente DEBUG to * , caso você esteja executando um aplicativo NodeJS / express.

Se você fizer isso, poderá identificar a seguinte linha em seus registros:

cookie-session error saving session Cannot send secure cookie over unencrypted connection

Você rastreará essa linha até a sessão de cookies e depois, até os cookies . Que é quando você percebe que tudo isso tem a ver com expressar não tratar a conexão como confiável.

Então o nginx não está removendo nenhum cookie. De certa forma, é a culpa embora. Eu encontrei a resposta na variável nginx $ scheme por trás do load balancer . Para citar a resposta aceita:

# Sets a $real_scheme variable whose value is the scheme passed by the load
# balancer in X-Forwarded-Proto (if any), defaulting to $scheme.
# Similar to how the HttpRealIp module treats X-Forwarded-For.
map $http_x_forwarded_proto $real_scheme {
  default $http_x_forwarded_proto;
  ''      $scheme;
}

Você poderia colocar isso em sua configuração nginx e usar $real_scheme em vez de $scheme para o cabeçalho X-Forwarded-Proto :

proxy_set_header "X-Forwarded-Proto" $real_scheme;
    
por 16.08.2016 / 16:32
0

Por padrão, o nginx não faz nenhum processamento relacionado a secure flag.

    
por 16.08.2016 / 16:31