Apache 上的 Django 与 mod_wsgi (Linux) - 403 Forbidden

Posted

技术标签:

【中文标题】Apache 上的 Django 与 mod_wsgi (Linux) - 403 Forbidden【英文标题】:Django on apache wtih mod_wsgi (Linux) - 403 Forbidden 【发布时间】:2014-02-18 09:33:24 【问题描述】:

好的,所以我正在关注this 教程。当我尝试通过本地服务器访问我的网站时,我收到了这个奇怪的错误:

Forbidden You don't have permission to access / on this server. Apache/2.4.6 (Ubuntu) Server at mysite.com Port 80.

就我而言,我做的一切都是正确的(我实施了两次建议的方法),这很可能是一个操作系统错误(我正在运行 Mint 16,错误显示(Ubuntu)),但是我没有经验并且所以我需要一些帮助。

我做了一些研究,但这些 (1,2) 问题以及其他问题似乎都无法回答我的问题。

所以这里是mysite.conf 文件:

<VirtualHost *:80>
WSGIScriptAlias / /home/nick/Mysite/mysite.wsgi

ServerName mysite.com
Alias /static /var/www/mysite/static/

<Directory /var/www/mysite/>

Options All
AllowOverride All
Require all granted

</Directory>
</VirtualHost>

还有我的 hosts 文件,它显示了 IP 地址是如何重定向到我的本地主机的:

127.0.0.1   localhost
127.0.1.1   nick-HP-Notebook-PC
192.168.1.2 mysite.com
192.168.1.2 mysite2.com

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

那么你认为问题是什么。这可能只是一个与 Linux 相关的错误吗? 如果您需要有关该项目或任何其他信息的更多信息,请告诉我。

非常感谢。

更新:

这是我的.wsgi 文件:

import os
import sys
sys.path = ['/var/www/mysite'] + sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

当我重新启动服务器时,我也会收到此消息。

Restarting web server apache2                                                AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message         [ OK ]

也许这有帮助?

【问题讨论】:

【参考方案1】:

如果这正是您的配置文件,那么我怀疑您使用的路径是错误的。请先解决这个问题。

将 WSGIScriptAlias 设置为正确的路径。

那么您的 WSGI 文件必须类似于:

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

【讨论】:

我已经更新了我的问题,以反映您的回答。 wsgi 文件很好,项目的路径也很好 你确定你在wsgi中放的路径是正确的吗?并发布错误 您指的是WSGIScriptAlias / /home/nick/Mysite/mysite.wsgi 路径吗?是的,我很确定这是正确的道路。哪个错误?? sys.path = ['/var/www/mysite'] + sys.path 这是我指的路径而不是 WSGIScriptAlias 哦,好的,抱歉。我的项目结构如下:/var/www/mysite/mysite/wsgi.py 文件。应该怎么样?【参考方案2】:

一开始的事情:

WSGIScriptAlias / /home/nick/Mysite/mysite.wsgi

为此,你没有对应的:

<Directory/home/nick/Mysite>
<Files mysite.wsgi>
Require all granted
</Files>
</Directory>

此外,诸如 /home/nick 之类的主目录通常对其他用户不可读,因此 Apache 无论如何也无法读取该目录中的内容。

接下来是:

Alias /static /var/www/mysite/static/

您不应该在最终路径上使用斜杠。在子 URL 时不匹配它们可能会导致问题,尽管通常当尾部斜杠位于 URL 上并且文件系统路径丢失时。最好让它们匹配是否使用斜杠。

【讨论】:

所以项目文件应该移动到另一个目录吗?如果我评论Alias /static /var/www/mysite/static/ 最好? 将它放在您的主目录中并不理想。您仍然需要 Alias 指令,以便 Apache 可以为 Django 托管静态文件,您只需要正确设置它。见docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/…【参考方案3】:

我遇到了同样的问题。

您的 .wsgi 脚本应位于 /var/www/mysite/ 文件夹中,然后应根据需要调整配置文件。

同时删除前导 / :

.. Alias /static /var/www/mysite/static ..

【讨论】:

以上是关于Apache 上的 Django 与 mod_wsgi (Linux) - 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

Apache 上的 Django 与 mod_wsgi (Linux) - 403 Forbidden

Apache2 上的 Django:问题 in.conf 文件?

apache虚拟主机与django一起工作

Windows 上的 Apache 2.4、Python 和 Django

Apache24 上的 DJango 部署不起作用

centos 6.5 上 Apache 2.2.15 上的 Django