Adicionar cookie no nginx

2

Eu tenho o servidor nginx que serve como proxy para solicitações internacionais e vive no domínio .com.

Eu tenho configuração de proxy simples, onde o servidor tradernet.com faz o proxy de todo o tráfego de entrada para o servidor tradernet.ru.

O que estou tentando adicionar é o cookie de idioma, que será usado pelo servidor .ru para exibir o idioma correto.

Aqui está o que estou fazendo:

set $language $cookie_language;

#Setting language cookie
if ($language = "") {
     add_header Set-Cookie "language=en;Domain=.tradernet.com;Path=/;Max-Age=31536000";
}

Como você pode ver, eu configuro o cookie no domínio .com e isso não tem efeito, já que o servidor em .ru está esperando pelo cookie que está definido para o domínio .tradernet.ru.

Se eu tentar adicionar um cookie com o domínio .ru, não está funcionando por algum motivo - minha solicitação está sendo intermediada por proxy para o servidor .ru sem nenhum cookie de idioma.

add_header Set-Cookie "language=en;Domain=.tradernet.ru;Path=/;Max-Age=31536000";

Portanto, a pergunta é: como adicionar um cookie no servidor proxy que teria outro domínio?

    
por Prosto Trader 27.11.2014 / 13:05

1 resposta

2

você pode substituir ou editar o cookie do seu servidor de back-end com proxy_cookie_domain por favor, veja link

Atualização: Talvez eu devesse ter me explicado melhor:

Você já sabe que o segundo add_header com o domínio sendo definido como .ru não funciona como navegadores não enviará o cookie de volta para tradernet.com. Quanto ao motivo pelo qual o primeiro não funciona para você, não posso dizer que não entendo exatamente o que não funciona:

  • Set-Cookie não é enviado ao cliente se ainda não houver um cookie de idioma presente
  • a parte do Set-Cookie funciona, mas o back-end não sabe como usá-la (por exemplo, porque espera um cookie para .ru, mas recebe um cookie .com)

Então, o que eu faria seria não usar o add_header, mas modificar o cookie que o seu back-end já envia e, se ele não enviar um cookie, implementá-lo e simplesmente reescrever o cookie com proxy_domain_cookie. Por isso, se o seu back-end já definir um cookie que apenas perde a parte do idioma, algo como isto pode ajudar:

proxy_cookie_domain tradernet.ru tradernet.com;
proxy_cookie_domain ~^(.+)$ "$1; language=en";

Dependendo de quanto você controla a lógica se você backend, você também pode detectar o idioma adicionando um cabeçalho que é enviado para o servidor backend como

proxy_set_header language en;
    
por 27.11.2014 / 13:51

Tags