我在Ubuntu Server 12.04上使用Django 1.4和Python 2.7。我正在尝试在一台服务器上托管多个网站。我是Apache的新手,在设置虚拟主机时似乎写错了。
我拥有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
。
我不相信我已修改任何其他配置文件。关于我做错了什么的任何想法?
答案 0 :(得分: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,并且每个人都有一个onsensite,你应该很高兴。
如果您还有其他需要,请告诉我。