2012-11-28 87 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