0

私は 2 つのサイトで Django 1.5 を展開しています。それぞれが他のサイトから独立しています (それぞれが独自のデータベースを持っています) が、これら 2 つのサイトはサブドメインnew.mydomain.comですdev.mydomain.com: mod_wsgi で Apache を使用しています。

問題は、Apache から Django のユーザー データベースに対して正しく認証していますが、Apache 認証で Django グループを使用しようとすると、次のような状況になります。

newサブドメインの 1 つには問題なくログインできますが、別のドメイン( dev) にログインしようとするとできません。Apache は、ユーザーが許可されたグループに属していないと言っています。次に、Apache を再起動してログインしようとするとdev(以前は不可能でした)、ここでは問題ありませんが、他のサブドメインでログインすることはできなくなりましたnew

要約すると、使用する (許可された) ユーザーに関係なく、2 つの sudomain に同時にログインすることはできません。

サブドメインの仮想ホストはnew次のとおりです (もう 1 つは、パスを変更するこのようなものです)。

<VirtualHost *:80>
    ServerName new.mydomain.com
    ServerAlias www.new.mydomain.com
    ServerAdmin caumons@gmail.com

    Alias /robots.txt /var/www/sites/master/EurekaStart.git/EurekaStart/robots.txt
    Alias /favicon.ico /var/www/sites/master/EurekaStart.git/EurekaStart/static_collected/img/favicon.ico

    Alias /static/ /var/www/sites/master/EurekaStart.git/EurekaStart/static_collected/

    <Directory /var/www/sites/master/EurekaStart.git/EurekaStart/static_collected>
        Order deny,allow
        Allow from all
    </Directory>

    Alias /media/ /var/www/sites/master/EurekaStart.git/EurekaStart/media/

    <Directory /var/www/sites/master/EurekaStart.git/EurekaStart/media>
        Order deny,allow
        Allow from all
    </Directory>

    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

    WSGIScriptAlias / /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py

    <Directory /var/www/sites/master/EurekaStart.git/EurekaStart>
        <Files wsgi.py>
            Order deny,allow
            Allow from all
        </Files>
    </Directory>

    <Location "/">
        AuthType Basic
        AuthName "Enter your guest user & password"
        Require group guest
        Require valid-user
        AuthBasicProvider wsgi
        WSGIAuthUserScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py
        WSGIAuthGroupScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py
    </Location>

    ErrorLog /var/www/sites/master/EurekaStart.git/logs/apache/error.log
    TransferLog /var/www/sites/master/EurekaStart.git/logs/apache/access.log
</VirtualHost>

サブドメインのwsgi.pyファイルはnew次のようになります (サブドメインの wsgi ファイルdevはこれとまったく同じです):

import os
import sys
from django.core.handlers.wsgi import WSGIHandler

# We need to add the site's root path to sys.path when using Django Authentication for WSGI
SITE_PKG_PATH = os.path.abspath(os.path.dirname(__file__))
SITE_ROOT_PATH = os.path.abspath(os.path.join(SITE_PKG_PATH, '..'))
sys.path.append(SITE_ROOT_PATH)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "EurekaStart.settings")


# This import MUST be done after setting `DJANGO_SETTINGS_MODULE`
import django.contrib.auth.handlers.modwsgi as modwsgi


def check_password(environ, user, password):
    return modwsgi.check_password(environ, user, password)


def groups_for_user(environ, user):
    return modwsgi.groups_for_user(environ, user)


application = WSGIHandler()

更新 1:

@GrahamDumpletonに感謝します:)

Apache の設定ファイルと設定方法を更新しましたDJANGO_SETTINGS_MODULE。これで、Apache の WSGI に関する構成は次のようになります。

サイトnew内:

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>

サイトdev内:

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>
4

1 に答える 1

1

SESSION_COOKIE_DOMAIN をどのように設定していますか?

と SESSION_COOKIE_NAME?

両方のサイトで同じですか?ドメイン用のものは、メイン ドメインではなく、少なくともサブ ドメインを参照する必要があります。


更新 1

それ以外の:

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

使用する:

WSGIAuthUserScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py application-group=new.mydomain.com
WSGIAuthGroupScript /var/www/sites/master/EurekaStart.git/EurekaStart/wsgi.py application-group=new.mydomain.com

WSGIAuthUserScript および WSGIAuthGroupScript によって実行される Python コードは、常に Apache 子ワーカー プロセスで実行され、メイン Web アプリケーションが存在するデーモン モード プロセスでは決して実行されません。

あなたの場合のより多くの問題は、デフォルトでコードがメインのインタープリター (アプリケーション グループ) コンテキストで実行されることです。2 つのサイトがあるため、コードは分離されません。

これらのディレクティブで application-group オプションを使用することにより、個別のサイトごとにコードが実行されるプロセスの異なるサブ インタープリターで実行するように強制できます。他のサイトの application-group には異なる値を使用します。

以下も使用できません。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "EurekaStart.settings")

次を使用する必要があります。

os.environ["DJANGO_SETTINGS_MODULE"] = "EurekaStart.settings"

dict.setdefault() を使用すると、異なるサブ インタープリターであっても、同じプロセス内の複数のサイトで使用されると問題が発生します。詳細については、次を参照してください。

于 2013-09-30T04:11:40.637 に答える