我在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