【发布时间】:2012-09-20 14:48:16
【问题描述】:
如何最好地将 Django Web 应用程序托管在同一台服务器上但用于两个不同的域?
我有一个使用 Apache+mod_wsgi 部署的 Django Web 应用程序,我想通过两个单独的域(例如 wwww.mydomain.com 和 www.otherdomain.com)访问它。两个域共享相同的数据库和用户帐户,但具有特定于域的功能(主要是美观,显示不同的模板、图形、一些额外的工具等)。
每个域也有自己的 SSL 证书。用户也可能在域之间被反弹(例如,他们从 mydomain.com 开始,然后“启用”将他们带到 otherdomain.com 的功能)。
起初我以为我所要做的就是将域附加到我的 Apache conf 文件中的 ServerAlias 指令中。例如ServerAlias *mydomain.com *otherdomain.com。但是,我遇到了一些问题。
如果我正确阅读this,单个 Apache 部分只能支持 一个 域的证书(不包括子域的通配符证书),因此为了支持 HTTPS我需要复制我的两个域,为第二个域交换不同的证书信息。
为了正确跟踪 cookie,我需要将
SESSION_COOKIE_DOMAIN和CSRF_COOKIE_DOMAIN设置为正在使用的域。但是,每个 settings.py 只能执行一次,所以概述了here,我需要创建重复的 settings.py 文件(例如 settings_mydomain.py 和 settings_otherdomain.py)以及重复的 django.wsgi 文件,每个文件都使用适当的设置模块。使用默认设置,如果用户从一个域跳到另一个域,他们将丢失所有 cookie,导致他们在登录后被注销。我不确定如何最好解决这个问题。由于用户被 Django 视图重定向,起初我想我可以复制 cookie,将旧域换成新域。另一个想法是将 cookie 复制到数据库表中,使用一次性查找哈希进行索引(例如,与 Django 进行注册确认的方式相同),并将此哈希包含在重定向中,然后应用程序将使用该哈希来查找 cookie 和将它们设置在客户端中。这些都行吗?
这三个问题有没有更好的解决方案?还有其他我忽略的问题或问题吗?
【问题讨论】:
-
你在使用 Django
sites吗? -
好问题。使用
sites和单独的设置文件,我认为您走在正确的轨道上,并且您最后提出的会话解决方案听起来是可行的。我不建议移动这篇文章,但 serverfault.com 上的一个类似问题可能会得到回报。 -
@YuvalAdam,
django.contrib.sites?是的。
标签: python django apache cross-domain