在我的 /etc/apache2/sites-enabled 中,我有一个文件 site2.com.conf,它定义了一个虚拟主机,如下所示:
<VirtualHost *:80>
ServerAdmin hostmaster@wharfage
ServerName site2.com
ServerAlias www.site2.com site2.com
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www
LogLevel debug
ErrorLog /var/log/apache2/site2_error.log
CustomLog /var/log/apache2/site2_access.log combined
ServerSignature Off
<Location />
Options -Indexes
</Location>
Alias /favicon.ico /srv/site2/static/favicon.ico
Alias /static /srv/site2/static
# Alias /media /usr/local/lib/python2.5/site-packages/django/contrib/admin/media
Alias /admin/media /var/lib/python-support/python2.5/django/contrib/admin/media
WSGIScriptAlias / /srv/site2/wsgi/django.wsgi
WSGIDaemonProcess site2 user=samj group=samj processes=1 threads=10
WSGIProcessGroup site2
</VirtualHost>
我执行以下操作来启用该网站:
1)在 /etc/apache2/sites-enabled 中,我运行命令 a2ensite site2.com.conf
2)然后我收到一条消息,站点已成功启用,然后我运行命令 /etc/init.d/apache2 reload。
但是,如果我导航到 www.site2.com,就会出现 404 未找到。我在 /var/www 中有一个 index.html(权限:777 和所有权 www-data:www-data),并且我还验证了在 /etc/apache2/sites-enabled 中为 site2.com.conf 创建了一个符号链接。
有任何解决这个问题的方法吗 ?
谢谢。
答案1
您的 WSGIScriptAlias 指令表示将除明确 Alias 匹配的静态文件之外的所有内容都发送到 Django。因此,如果您尝试明确访问 index.html,它将不会使用静态文件,并且如果 Django 不知道如何处理它,它将返回 404。您使用的实际 URL 是什么?对于该 URL,您是否在 Django urls.py 中为其进行了匹配配置,以便 Django 知道该怎么做?
或者,问题可能是因为您实际上没有 /srv/site2/wsgi/django.wsgi 文件,或者因为您没有为 /srv/site2/wsgi 设置允许指令(如 Django/mod_wsgi 文档所述),尽管缺少该指令通常会导致 403。
建议您先注释掉 WSGIScriptAlias,看看会发生什么。然后您需要用实际示例正确解释您希望事情如何运作。阅读 mod_wsgi 网站上的 Django 集成指南也可能是一个好主意。
答案2
你有没有:
NameVirtualHost *:80
在你的配置中?你需要将它包含在 apache 配置中的某个位置(Debian 上的 ports.conf),然后重新启动 apache。