我在Ubuntu Server 12.04上使用Django 1.4和Python 2.7。我試圖在一臺服務器上託管多個網站。我是Apache的新手,並且在設置虛擬主機時似乎寫錯了某些內容。Apache2設置使用Django項目的子域名虛擬主機
我擁有2個域,我試圖在一臺服務器上託管。稱它們爲www.my_first_domain.com
和www.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。
以下是我設置的三個文件示例,嘗試使其起作用。
/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
,這與我使用虛擬主機時的方式相同。
我不相信我修改過任何其他配置文件。任何想法,我做錯了什麼?
兩條評論:1)你在每個配置上運行'a2ensite',對嗎? 2)確保你的Python路徑在你的wsgi.py腳本中是正確的。希望有所幫助。編輯:確保你的confs在'sites-available'中,然後運行'a2ensite'不只是在'sites-enabled'中創建文件。 – themanatuf
@themanatuf我確實使用過'a2ensite',然後編輯它們以獲得虛擬主機信息。我還在wsgi.py腳本中加倍檢查了Python路徑 - 「sys.path.append('/ home/user3/website/project3')」等。此外,conf文件也在'sites-available '因爲它們只是符號鏈接。 – Rico
這一秒我沒有訪問我的服務器,但我認爲這些符號鏈接在'sites-enabled'下,原始文件在'sites-available'下。我已經完成了你所要求的沒有任何問題,所以當我回家時我會仔細檢查我的服務器。與此同時,仔細檢查一下我對原本應該在'sites-available'中的原始文件的想法。 – themanatuf