Django/Apache/mod_wsgi:如何在不使主目录可在全球范围内执行的情况下避免 403?

Django/Apache/mod_wsgi:如何在不使主目录可在全球范围内执行的情况下避免 403?

[请参阅问题底部了解最新状态!]

我正在尝试在 vanilla Debian 6.0 机器上使用 Apache + mod_wsgi 设置 Django。

不幸的是,当我在浏览器中访问该机器的 IP 地址时,我得到的是403 Forbidden: You don't have permission to access / on this server。Apache 日志只显示:

[Wed May 04 10:20:56 2011] [error] [client x.x.x.x] (13)Permission denied: access to / denied

因此,这就是我尝试做的事情。我在 上建立了一个新的 Django 项目~/fruit/myfruit,并在 上建立了一些 WSGI/Apache 文件~/fruit/apache,如下所示:

**~/fruit/apache/django.wsgi**
import os
import sys
path = '~/fruit'
if path not in sys.path:
    sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myfruit.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

**~/fruit/apache/django_wsgi.conf**
WSGIScriptAlias / "/root/fruit/apache/django.wsgi"
<Directory "/root/fruit/apache">
Order deny,allow
Allow from all
</Directory>

我已经编辑了各种 Apache 文件,如下所示:

**/etc/apache2/httpd.conf **
LoadModule wsgi_module modules/mod_wsgi.so
Include "/root/fruit/apache/django_wsgi.conf"

**/etc/hosts**
127.0.0.1 localhost
[[my_ip_address]] debian debian

当我重新启动 Apache(以 root 身份运行)时,收到以下警告:

root@debian:~/fruit/apache# /etc/init.d/apache2 restart
Restarting web server: apache2[Wed May 04 10:27:36 2011] [warn] module wsgi_module is already loaded, skipping
apache2: Could not reliably determine the server's fully qualified domain name, using [[my_ip_address]] for ServerName
 ... waiting [Wed May 04 10:27:37 2011] [warn] module wsgi_module is already loaded, skipping
apache2: Could not reliably determine the server's fully qualified domain name, using [[my_ip_address]] for ServerName
.

我不知道这些是否与权限错误有关,或者错误消息被打印两次是否重要。

请问有人能告诉我我做错了什么吗?我对 Apache 经验很少!

非常感谢!

更新:如果是文件权限错误,我已对和目录chmod a+x *中的所有文件以及目录本身运行了检查,然后重新启动了 Apache。没有成功。myfruitapache

更新:我甚至无法连接到本地主机:

root@debian:~/fruit# wget http://localhost
--2011-05-04 10:44:41--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2011-05-04 10:44:41 ERROR 403: Forbidden.

更新:好的,解决了,chmod a+x通过在我的目录中设置root。但我一点也不喜欢这样——这肯定是一个安全漏洞吧?我应该怎么做呢?

答案1

不建议以 root 身份运行任何 Web 应用程序!

正如您已经发现的那样,这是一个权限问题。您必须在 /root 上使用 chmod a+x 的原因是因为没有其他用户(包括运行 apache 的用户)有权访问 /root 目录(它应该是私有的!)。

要么使用 /var/www 文件夹中的 Web 服务器用户(debian IIRC 上的 www-data)为应用程序提供服务,要么更好的是,创建一个全新的用户。

相关内容