【问题标题】:Django 1.10, Apache 2.4 Serving Basic App on CentOS7 Getting 403 Forbidden to /Django 1.10,Apache 2.4 Serving Basic App on CentOS7 得到 403 Forbidden to /
【发布时间】:2017-02-01 13:22:25
【问题描述】:

在这一点上搞砸只是为了让它发挥作用。

我收到403 Forbidden: You don't have permission to access / on this server. 错误。我一直在关注本指南,了解如何设置 Apache 以使用 CentOS 和 Django:

https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-centos-7

另外,阅读关于错误的几个关于 SO 的问题,但都没有解决问题。

我认为,新的 Django 项目安装应该只是在localhost:8000 处显示静态的“它正在工作的页面”。

/etc/httpd/conf.d/django_test.conf

Alias /static /home/dev/testserver/static
<Directory /home/dev/testserver/static>
  Require all granted
</Directory>

<Directory /home/dev/testserver/testserver>
  <Files wsgi.py>
     Require all granted
  </Files>
</Directory>

WSGIDaemonProcess testserver python-path=/home/dev/testserver:/home/venvs/django/lib/python3.6/site-packages
WSGIProcessGroup testserver
WSGIScriptAlias / /home/dev/testserver/testserver/wsgi.py

对此我很天真,但是除了设置HTTPD 之外,我是否必须运行python manage.py runserver?还是仅适用于使用内置 Django 服务器进行本地开发的情况?

说起来,我可以使用内置的 Django 服务器访问远程服务器上的页面,但理解这是非常不可取的。

我确实打开了80 端口,并且可以看到它正在侦听流量。

根据教程,我授予/home/dev 目录chmod 710 权限,并将apache 添加到与目录所有者相同的用户组中。

只是没有看到我做错了什么。

编辑#1

我开始只是逐行浏览/etc/httpd/conf/httpd.conf,看看是否有任何添加。对于group,我将其从apache 更改为sqladmin,因为我将apache 用户添加到该组。此外,请确保明确添加了 LoadModule wsgi_module modules/mod_wsgi.so。还是没有运气。

无论如何,我现在正在阅读mod_wsgipip 包,看看这是否可以解决我的问题。

编辑#2

error_log 内容如下:

[Tue Jan 31 16:26:31.961512 2017] [core:error] [pid 4561] (13)Permission denied: [client 192.168.1.39:57651] AH00035: access to / denied (filesystem path '/home/dev/testserver/testserver/wsgi.py') because search permissions are missing on a component of the path

[Tue Jan 31 16:26:31.986965 2017] [core:error] [pid 4561] (13)Permission denied: [client 192.168.1.39:57651] AH00035: access to /favicon.ico denied (filesystem path '/home/dev/testserver/testserver/wsgi.py') because search permissions are missing on a component of the path, referer: http://192.168.1.4/

说权限错误,但据我所知,它应该只查看/home/dev/home/venvs。所有这些都具有与/home 相同的权限。用户apache 存在,并且用户apachesqladmin 组的一部分,该组是所有这些目录和文件的组。我什至创建了一个apache 组并让sqladmin 成为其中的一部分。

目录权限列表:

drwxr-xr-x.  3 sqladmin sqladmin   24 Jan 31 15:08 dev
drwx------. 14 sqladmin sqladmin 4096 Jan 30 21:13 sqladmin
drwxr-xr-x.  3 sqladmin sqladmin   20 Jan 31 15:05 venvs

【问题讨论】:

    标签: django apache centos


    【解决方案1】:

    ...我是否必须另外运行 python manage.py runserver 设置 HTTPD?

    除了你也不需要它之外,你永远不会在生产环境中使用 manage.py runserver。这就是设置 apache 的重点

    接下来我们看看这个:

     WSGIDaemonProcess testserver python-path=/home/dev/testserver:/home/venvs/django/lib/python3.6/site-packages
    

    虽然您已经为您的主目录设置了权限。 /home/venvs 目录呢?这听起来像是一个完全不同的用户帐户。那么您是否相应地更改了该权限和组?

    其次,您需要使 te /home/dev/testserver 文件夹也可由 apache 读取且可执行。用户更改到该目录需要目录上的执行标志。您经常会发现在将项目传输到服务器时意外更改了权限。

    【讨论】:

    • 好的,感谢您的反馈和解决runserver 问题。我意识到我没有授予venvs 的权限。我授予750 许可./dev./venvs。仍然遇到同样的问题。还尝试了770777 只是为了看看是否有任何作用。它并没有变回750。只是不确定我在这里缺少什么。已验证的用户在组中。该组是sqladmin,内容为:sqladmin:x:1000:sqladmin,apache
    • 另外,运行httpd -M | grep wsgi 以确保mod_wsgihttpd 一起运行,它说wsgi_module (shared) 我猜是说它已加载?我没有修改httpd.conf 或任何东西。刚刚安装了yum
    • 我递归地应用了它们,因此它们与教程中指定的文件夹的权限相匹配。
    • 请在 /home/ 上做一个ls -l 以便我们也能看到权限
    • 更新了响应。
    【解决方案2】:

    好吧,不管它是否被认为是一个解决方案,因为我从来没有让 Apache + mod_wsgi 工作,但我确实通过PyPi mod_wsgi 让它工作。

    安装到virtualenv 并按照“在 Django 中使用 mod_wsgi-express”部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2020-05-24
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多