2012-11-28 81 views
0

我在Ubuntu Server 12.04上使用Django 1.4和Python 2.7。我试图在一台服务器上托管多个网站。我是Apache的新手,并且在设置虚拟主机时似乎写错了某些内容。Apache2设置使用Django项目的子域名虚拟主机

我拥有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.comproject4.my_second_domain.com

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

以下是我设置的三个文件示例,尝试使其起作用。

/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,这与我使用虚拟主机时的方式相同。

我不相信我修改过任何其他配置文件。任何想法,我做错了什么?

+0

两条评论:1)你在每个配置上运行'a2ensite',对吗? 2)确保你的Python路径在你的wsgi.py脚本中是正确的。希望有所帮助。编辑:确保你的confs在'sites-available'中,然后运行'a2ensite'不只是在'sites-enabled'中创建文件。 – themanatuf

+0

@themanatuf我确实使用过'a2ensite',然后编辑它们以获得虚拟主机信息。我还在wsgi.py脚本中加倍检查了Python路径 - “sys.path.append('/ home/user3/website/project3')”等。此外,conf文件也在'sites-available '因为它们只是符号链接。 – Rico

+0

这一秒我没有访问我的服务器,但我认为这些符号链接在'sites-enabled'下,原始文件在'sites-available'下。我已经完成了你所要求的没有任何问题,所以当我回家时我会仔细检查我的服务器。与此同时,仔细检查一下我对原本应该在'sites-available'中的原始文件的想法。 – themanatuf

回答

1

这是我的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() 

我有很多这些文件,它们都是由域名我命名正在使用该网站。确保你已经有了sites-available中的confs,并且你在每一个上运行了一个2站点,你应该很好走。

让我知道你是否需要别的东西。

+0

感谢您的帮助,但这只是不适合我。我看不到变化。 :( – Rico