我的 linode(Fedora 15)上托管了一个可以运行的 Django 应用程序,并且我还尝试在那里托管一个基于 php 的站点。我使用基于名称的虚拟主机根据主机名重定向请求,但出于某种原因,每个请求都会发送到 Django 应用程序。我在想,也许 mod_wsgi 覆盖了一些默认值?或者我的虚拟主机可能存在语法错误(我尝试过带引号和不带引号的 DocumentRoot)?以下是我的 httpd 配置文件的相关部分:
Name VirtualHost *:80
<VirtualHost *:80>
ServerName pollvaultr.com
ServerAlias www.pollvaultr.com
WSGIDaemonProcess pollvaultr.com user=apache group=apache
WSGIProcessGroup pollvaultr.com
WSGIScriptAlias / "/var/www/html/PollVaultr/wsgi.py"
Alias /static/ "/var/www/html/static/"
<Directory "/var/www/html/static">
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/html/PollVaultr">
<Files "wsgi.py">
Order allow,deny
Allow from all
</Files>
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/catfacts/"
ServerName lexiross.com
ServerAlias www.lexiross.com
</VirtualHost>
这是我的 wsgi.py 脚本:
import os, sys
sys.path.append('/var/www/html')
sys.path.append('/var/www/html/PollVaultr')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PollVaultr.settings")
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
运行后httpd -e DEBUG
未发现任何错误。这是我的 error_log 文件的结尾:
[Fri Feb 24 20:36:42 2012] [info] mod_wsgi (pid=5893): Create interpreter 'lexiross.com|'.
[Fri Feb 24 20:36:42 2012] [info] mod_wsgi (pid=5893): Adding '/var/www/html/' to path.
[Fri Feb 24 20:36:42 2012] [info] [client 140.247.248.217] mod_wsgi (pid=5893, process='', application='lexiross.com|'): Loading WSGI script '/var/www/html/PollVaultr/wsgi.py'.
有什么想法可能发生了什么吗?mod_wsgi 绝对不应该处理对 lexiross.com 的请求 - 为什么这些请求不会发送到备用文档根目录?我还应该提到,这是我第一次做系统管理员的工作,所以我对此很陌生!谢谢。
答案1
如果您没有正确设置第二个虚拟主机,或者没有找到它,那么 Apache 将回退到将请求发送到它在配置中找到的第一个虚拟主机。
虚拟主机在同一个文件中,还是在不同的文件中?如果在不同的文件中,并且位于 sites-available 目录中,您是否实际启用了第二个站点,以便链接到 sites-enabled?
尝试在第二个虚拟主机中添加语法错误以确保文件正在被读取。
另外,请修复示例中的“NameVirtualHost”指令,除非这是您的问题。其中不应有空格。