我有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。 至于为什么第一个不适合你,我不能说,因为我不明白什么是行不通的:
所以我要做的不是使用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;