【问题标题】:Multiple Sites in DjangoDjango 中的多个站点
【发布时间】:2013-02-02 02:28:51
【问题描述】:

有谁知道如何向 Django 添加多个域。 我已经尝试按照Multiple Sites under single Django project 此处的指南进行操作,但没有成功。

我的配置是这样的

设置

/opt/django/project/settings.py

/opt/django/project/domain1_settings.py

网址

/opt/django/project/urls.py

/opt/django/project/domain1_urls.py

wsgi

/opt/django/project/domain1/domain1.wsgi

阿帕奇

/etc/httpd/conf.d/django.conf

<VirtualHost * >
  ServerName domain1.co.uk
  ServerAlias www.domain1.co.uk direct.domain1.co.uk
  WSGIDaemonProcess domain1 processes=5 python-path=/usr/bin/python threads=1
  WSGIScriptAlias / /opt/django/project/domain1/domain1.wsgi
  ErrorLog logs/domain1-error.log
  CustomLog logs/domain1-access.log common
</VirtualHost>

当我重新启动 apache 时,我看不到任何错误,但是当我转到该站点时,我被发送到在主 httpd.conf 中配置的(非 django)域。

谢谢,

【问题讨论】:

    标签: django apache virtualhost


    【解决方案1】:

    这个答案假设您希望有两个域名,每个域名都运行单独的 Django 项目,但托管在同一个 Apache 服务器上。如果不是这种情况,请完善您的问题!

    首先,您需要在您的 apache conf 中添加两个 VirtualHost 条目(我们将您的网站称为 domain1.co.ukdomain2.co.uk

    # Virtual hosts setup
    NameVirtualHost *
    <VirtualHost *>
        ServerName domain1.co.uk
    
        WSGIDaemonProcess APPLICATION_NAME processes=5 python-path=/opt/django/project/domain1:/home/USERNAME/webapps/APPLICATION_NAME/lib/python2.6     threads=1
        WSGIScriptAlias / /opt/django/project/domain1/domain1.wsgi
    </VirtualHost>
    
    <VirtualHost *>
        ServerName domain2.co.uk
    
        WSGIDaemonProcess APPLICATION_NAME_www processes=5 python-path=/opt/django/project/domain2:/home/USERNAME/webapps/APPLICATION_NAME/lib/python2.6 threads=1
        WSGIScriptAlias / /opt/django/project/domain2/domain2.wsgi
    </VirtualHost>
    

    您还需要 2 个 wsgi 文件(在上面的 conf 中指出两个)

    /opt/django/project/domain1/domain1.wsgi
    /opt/django/project/domain1/domain2.wsgi
    

    看起来像

    import os
    import sys
    from django.core.handlers.wsgi import WSGIHandler
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' 
    # or     project.domain1_settings
    application = WSGIHandler()
    

    settings.py 上确保两个设置文件有区别SITE_ID = 1SITE_ID = 2 并且您指向正确的urls.py

    ROOT_URLCONF = 'urls'
    

    ROOT_URLCONF = 'domain1_urls'
    

    这个问题大部分来自个人经验和blog 帖子。您的项目目录和域名似乎有点混乱,我已尽力将它们放置在此处的正确位置,但您需要根据自己的目的进行调整。

    附加

    如果您在同一台服务器上运行两个站点,则必须非常小心地保持项目目录、静态文件目录和设置文件等的一致性。 根据您的问题,您说您的设置文件是/opt/django/project/settings.py/opt/django/project/domain1_settings.py 这很令人困惑,因为您似乎有一个项目目录(/opt/django/project)。我强烈建议加强分离;正如我上面所描述的,也许在目录中设置你的项目(domain1domain2

    /opt/django/project/domain1/
    /opt/django/project/domain2/
    

    带有相应的设置文件

    /opt/django/project/domain1/settings.py
    /opt/django/project/domain2/settings.py
    

    等等。这应该更容易发现哪里出了问题。

    【讨论】:

    • 感谢您的回复。我已经添加了您建议的设置,但我通过 apache 看到了 500 错误。浏览日志时,它显示它无法导入我的新设置文件。新的设置文件位于 maint 项目文件夹中,我在 wsgi 文件中添加了指向它的行 ----> os.environ['DJANGO_SETTINGS_MODULE'] = 'domain1_settings' 谢谢,
    • 将正确的 sys 路径添加到我的 wgsi 文件并确保我的所有项目/应用程序导入都是不变的之后,一切都开始工作了。非常感谢...
    猜你喜欢
    • 2013-09-21
    • 2012-03-30
    • 2018-05-28
    • 2012-01-10
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多