使用ApacheAuth使用两个子域部署django时出现的问题

使用ApacheAuth使用两个子域部署django时出现的问题,django,apache,authentication,mod-wsgi,django-deployment,Django,Apache,Authentication,Mod Wsgi,Django Deployment,我正在部署一个Django 1.5,它有两个站点,每个站点独立于另一个站点(每个站点都有自己的数据库),但这两个站点都是子域:一个是new.mydomain.com,另一个是dev.mydomain.com。我正在使用Apache和mod_wsgi 问题是:我是正确的,但当我尝试将Django组与Apache身份验证一起使用时,会出现以下情况: 我可以毫无问题地登录到其中一个子域,例如new,但是如果我尝试登录到另一个子域(dev),我就不能。Apache说用户不在允许的组中。然后,如果我重新启

我正在部署一个Django 1.5,它有两个站点,每个站点独立于另一个站点(每个站点都有自己的数据库),但这两个站点都是子域:一个是
new.mydomain.com
,另一个是
dev.mydomain.com
。我正在使用Apache和mod_wsgi

问题是:我是正确的,但当我尝试将Django组与Apache身份验证一起使用时,会出现以下情况:

我可以毫无问题地登录到其中一个子域,例如
new
,但是如果我尝试登录到另一个子域(
dev
),我就不能。Apache说用户不在允许的组中。然后,如果我重新启动Apache并尝试登录到
dev
(这以前是不可能的),那么这里就没有问题了,但是现在不可能使用另一个子域
new
登录了

总而言之:无论我使用哪一个(允许的)用户,我都不能同时登录到这两个域。

new
子域的虚拟主机是(另一个看起来像这一个,正在改变路径):


更新1:

WSGIDaemonProcess eureka-startups.com python-path=/var/www/sites/master/EurekaStart.git:/var/www/sites/master/EurekaStart.git/env/lib/python2.7/site-packages
WSGIProcessGroup eureka-startups.com

<Location "/">
    AuthType Basic
    AuthName "Enter your guest user & password"
    AuthBasicProvider wsgi
    Require group guest
    Require valid-user
    WSGIAuthUserScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py application-group=eureka-startups.com
    WSGIAuthGroupScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py application-group=eureka-startups.com
</Location>
WSGIDaemonProcess dev.eureka-startups.com python-path=/var/www/sites/dev/EurekaStart-dev.git:/var/www/sites/dev/EurekaStart-dev.git/env/lib/python2.7/site-packages
WSGIProcessGroup dev.eureka-startups.com

<Location "/">
    AuthType Basic
    AuthName "Eureka-Startups staff members only"
    AuthBasicProvider wsgi
    Require group dev
    Require valid-user
    WSGIAuthUserScript /var/www/sites/dev/EurekaStart-dev.git/EurekaStart/wsgi.py application-group=dev.eureka-startups.com
    WSGIAuthGroupScript /var/www/sites/dev/EurekaStart-dev.git/EurekaStart/wsgi.py application-group=dev.eureka-startups.com
</Location>
非常感谢to@GrahamDumpleton:)

我已经更新了apache配置文件和设置DJANGO\u设置\u模块的方式。现在,有关Apache的WSGI的配置如下所示:

新建
站点:

WSGIDaemonProcess eureka-startups.com python-path=/var/www/sites/master/EurekaStart.git:/var/www/sites/master/EurekaStart.git/env/lib/python2.7/site-packages
WSGIProcessGroup eureka-startups.com

<Location "/">
    AuthType Basic
    AuthName "Enter your guest user & password"
    AuthBasicProvider wsgi
    Require group guest
    Require valid-user
    WSGIAuthUserScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py application-group=eureka-startups.com
    WSGIAuthGroupScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py application-group=eureka-startups.com
</Location>
WSGIDaemonProcess dev.eureka-startups.com python-path=/var/www/sites/dev/EurekaStart-dev.git:/var/www/sites/dev/EurekaStart-dev.git/env/lib/python2.7/site-packages
WSGIProcessGroup dev.eureka-startups.com

<Location "/">
    AuthType Basic
    AuthName "Eureka-Startups staff members only"
    AuthBasicProvider wsgi
    Require group dev
    Require valid-user
    WSGIAuthUserScript /var/www/sites/dev/EurekaStart-dev.git/EurekaStart/wsgi.py application-group=dev.eureka-startups.com
    WSGIAuthGroupScript /var/www/sites/dev/EurekaStart-dev.git/EurekaStart/wsgi.py application-group=dev.eureka-startups.com
</Location>

如何设置会话\u COOKIE\u域

会话名称是什么

这两个站点是否相同?域的一个应该至少引用子域而不是主域


更新1

而不是:

WSGIAuthUserScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py
WSGIAuthGroupScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py
使用:

WSGIAuthUserScript和WSGIAuthGroupScript运行的Python代码始终在Apache子工作进程中运行,而不是在主web应用程序所在的守护进程模式进程中运行

在您的例子中,更大的问题是默认情况下代码在主解释器(应用程序组)上下文中运行。因为您有两个站点,所以代码不会分开

通过在这些指令上使用应用程序组选项,您可以强制每个单独站点的代码在它们运行的进程的不同子解释器中运行。为其他站点的应用程序组使用其他值

您也不能使用:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "EurekaStart.settings")
您必须使用:

os.environ["DJANGO_SETTINGS_MODULE"] = "EurekaStart.settings"
如果在同一进程中被多个站点使用,即使在不同的子解释器中,使用dict.setdefault()也会导致问题。有关更多详细信息,请参阅:


我没有在设置中设置此值。我现在尝试在其中一个中设置
SESSION\u COOKIE\u DOMAIN='new.eureka startups.com'
,在另一个中设置
SESSION\u COOKIE\u DOMAIN='dev.eureka-startups.com'
,但情况仍然相同……:(我没有更改
会话\u COOKIE\u NAME
,这真的很重要吗?抱歉,假设您使用的是普通Django登录,而不是带有自定义密码验证器的Apache basic身份验证。请参阅上面的更新。非常感谢您的回复,您是一位先生!现在工作正常了!:)我更新了我的问题,以反映所做的更改。然而,我有一些疑问:我试图包含指令
WSGIApplicationGroup
,而不是使用
applicationgroup
,但它不起作用。难道不是一样吗?在
wsgi.py
中,我不知道使用
application=WSGIHandler()
application=get\wsgi\u application()
之间有什么区别。这有关系吗?而且。。。像我这样,对同一虚拟主机使用相同的名称,对
WSGIDaemonProcess
WSGIProcessGroup
是否不好?再次感谢!:)附带的链接中提供的信息非常好:)为用户/组身份验证脚本覆盖应用程序组的唯一方法是应用程序组选项。WSGIApplicationGroup仅适用于使用WSGIScriptAlias的主web应用程序设置。WSGIScriptAlias还可以采用一个应用程序组选项,该选项将覆盖其他任何内容。
os.environ["DJANGO_SETTINGS_MODULE"] = "EurekaStart.settings"