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 文件?