在nginx中添加cookie

我有nginx服务器,作为代理国际请求和生活在.com域。

我有简单的代理configuration,其中tradernet.com服务器代理到tradernet.ru服务器的所有传入stream量。

我想添加的是语言cookie,将被.ru服务器用来提供正确的语言。

这是我在做什么:

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

正如你所看到的,我在domain .com上设置了cookie,并且它不起作用,因为.ru上的服务器正在等待设置为.tradernet.ru域的cookie。

如果我尝试使用.ru域名添加cookie,由于某种原因,这不起作用 – 我的请求正在被代理到.ru服务器而没有任何语言cookie。

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

所以问题是 – 如何在代理服务器中添加cookie,将有另一个域?

您可以使用proxy_cookie_domain替​​换或编辑您的后端服务器的cookie,请参阅http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

更新:也许我应该更好地解释自己:

您已经知道,将Domain设置为.ru的第二个add_header无法工作,因为浏览器不会将该cookie发送回tradernet.com。 至于为什么第一个不适合你,我不能说,因为我不明白什么是行不通的:

  • 如果不存在语言Cookie,则Set-Cookie不会发送到客户端
  • Set-Cookie部分起作用,但是你的后端不知道如何使用它(例如,因为它需要一个.ru的cookie,但收到一个.com cookie)

所以我要做的不是使用add_header,而是修改你的后端已经发送的Cookie,并且如果它根本没有发送一个cookie,在那里实现它,然后用proxy_domain_cookie重写cookie。 因此,如果您的后端已经设置了一个只是错过了语言部分的cookie,可能会有所帮助:

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

根据您控制逻辑的程度,您可以通过添加发送到后端服务器的标题来检测语言

 proxy_set_header language en;