1

我在 Ubuntu Server 12.04 上使用 Django 1.4 和 Python 2.7。我正在尝试在单个服务器上托管多个网站。我是 Apache 新手,在设置虚拟主机时似乎写错了一些东西。

我拥有 2 个要在单个服务器上托管的域。打电话给他们www.my_first_domain.comwww.my_second_domain.com

现在,我要托管超过 3 个 Django 项目。将指向一个项目www.my_first_domain.com。将指向一个项目www.my_second_domain.com。所有其他项目将指向www.my_second_domain.com.

project3.my_second_domain.com,project4.my_second_domain.com

我已经管理 DNS 让所有这些都指向正确的 IP。我已经用`host www.my_first_domain.com, host www.my_second_domain.com,host project3.my_second_domain.com等验证了这一点。它们都指向正确的 IP。

下面是我设置的 3 个文件示例,以尝试使其正常工作。

/etc/apache2/sites-enabled/project1

<VirtualHost *:80>
        ServerName www.my_first_domain.com
        ServerAlias *.my_first_domain.com my_first_domain.com
        DocumentRoot /var/www/project1

        CustomLog /var/log/apache2/www.my_first_domain.com-access.log combined
        ErrorLog /var/log/apache2/www.my_first_domain.com-error.log

        WSGIScriptAlias / /home/user1/website/project1/project1/wsgi.py

        <Directory /home/user1/website/project1/project1>
                <Files wsgi.py>
                        Order deny,allow
                        Allow from all
                </Files>
        </Directory>
</VirtualHost>

/etc/apache2/sites-enabled/project2

<VirtualHost *:80>
        ServerName www.my_second_domain.com
        ServerAlias my_second_domain.com
        DocumentRoot /var/www/project2

        CustomLog /var/log/apache2/www.my_second_domain.com-access.log combined
        ErrorLog /var/log/apache2/www.my_second_domain.com-error.log

        WSGIScriptAlias / /home/user2/website/project2/project2/wsgi.py

        <Directory /home/user2/website/project2/project2>
                <Files wsgi.py>
                        Order deny,allow
                        Allow from all
                </Files>
        </Directory>
</VirtualHost>

/etc/apache2/sites-enabled/project3

<VirtualHost *:80>
        ServerName project3.my_second_domain.com
        DocumentRoot /var/www/project3

        CustomLog /var/log/apache2/project3.my_second_domain.com-access.log combined
        ErrorLog /var/log/apache2/project3.my_second_domain.com-error.log

        WSGIScriptAlias / /home/user3/website/project3/project3/wsgi.py

        <Directory /home/user3/website/project3/project3>
                <Files wsgi.py>
                        Order deny,allow
                        Allow from all
                </Files>
        </Directory>
</VirtualHost>

如果我去 www.my_first_domain.com 一切看起来都是正确的。当我访问 www.my_second_domain.com 时,我会看到 www.my_first_domain.com 上的内容(我的第一个项目,而不是我的第二个项目)。如果我去 project3.my_second_domain.com 我会得到一个Internal Server Error.

如果我查看 project3 的错误日志,它看起来像是在尝试加载 project1 的 Django 设置。

我故意清空/etc/apache2/httpd.conf,因为我的印象是sites-enabled文件将被用来代替httpd.conf像我这样使用虚拟主机时。

我不相信我修改了任何其他配置文件。关于我做错了什么有什么想法吗?

4

1 回答 1

2

这是我的 conf 文件的样子:

VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com *.domain.com
    DocumentRoot /var/www/domain

    Alias /static/ /var/www/domain/static/

    WSGIScriptAlias / /var/www/domain/django.wsgi

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^((?!www\.)[^.]+)\.domain.com$
    RewriteRule ^/(.*)$ http://www.domain/invite/%1/$1 [QSA,P]

    ErrorLog ${APACHE_LOG_DIR}/domain/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/domain/access.log combined

    <Directory /var/www/domain/static>
        Order deny,allow
        Allow from all 
    </Directory>
    <Directory /var/www/domain/>
        Order allow,deny
        Allow from all 
    </Directory>
</VirtualHost>

这是我的 .wsgi 文件:

import os
import sys 
sys.path.append('/home/ubuntu/django')
sys.path.append('/home/ubuntu/django/domain')

os.environ['DJANGO_SETTINGS_MODULE'] = 'domain.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我有许多这样的文件,它们都以我用于该站点的域名命名。确保你有 confssites-available并且你在每一个上运行 a2ensite 并且你应该很高兴。

需要帮助请叫我。

于 2012-11-29T01:10:21.290 回答