我使用gunicorn和nginx在一台服务器上运行多个Django项目。目前,它们均配置为使用nginx中的server指令在同一IP地址的唯一端口上运行。这一切都很好。
...
server {
listen 81;
server_name my.ip.x.x;
... #static hosting and reverse proxy to site1
}
server {
listen 84;
server_name my.ip.x.x;
... #static hosting and reverse proxy to site2
}
...
当我在2个标签中打开2个不同的项目时,我遇到了一个问题,我意识到我无法同时登录这两个站点(都使用内置的Django User模型和auth)。在检查我浏览器中保存的cookie时,我意识到cookie只绑定了域名(在我的例子中只是一个IP地址)而且它不包括端口。
在第二个网站上,我尝试更改SESSION_COOKIE_NAME和SESSION_COOKIE_DOMAIN,但它似乎无法正常工作,使用这些当前设置我甚至无法登录。
SESSION_COOKIE_DOMAIN = 'my.ip.x.x:84' #solution is to leave this as default
SESSION_COOKIE_NAME = 'site2' #just using this works
SESSION_COOKIE_PATH = '/' #solution is to leave this as default
#site1 is using all default values for these
如果两个网站的Cookie都是独立运作,我需要做些什么?
答案 0 :(得分:17)
只需更改SESSION_COOKIE_NAME
即可。 SESSION_COOKIE_DOMAIN
不支持端口号afaik。所以它们对你的应用程序来说都是一样的。
答案 1 :(得分:3)
另一个不需要为每个站点硬编码不同cookie名称的解决方案是编写一个中间件,根据请求所在的端口更改cookie名称。
Here's a simple version(只需几行代码)。