【问题标题】:403 Forbidden : Apache not working after moving document root folder to iCloud drive403 Forbidden:将文档根文件夹移动到 iCloud 驱动器后,Apache 不工作
【发布时间】:2020-02-07 20:04:13
【问题描述】:

所以我使用的是 MacOS Catalina,并且我的 Apache 环境运行良好,直到我决定将我的文档根目录移动到 iCloud 驱动器以保持备份。

在我的文档根目录之前:

/users/admin/www

现在是

/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www

我相应地编辑了 httpd.conf :

DocumentRoot "/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www"
<Directory "/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www">
    Options FollowSymLinks Multiviews SymLinksIfOwnerMatch
    MultiviewsMatch Any
    AllowOverride All
    Require all granted
</Directory>

<Directory "/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www/myfolder">
    Options +FollowSymLinks +Multiviews +SymLinksIfOwnerMatch
    MultiviewsMatch Any
    AllowOverride All
    Allow from All
    Require all granted
</Directory>

重新启动 Apache,重新启动机器,但现在我可以访问 127.0.0.1,除了一个特定文件夹(我们称之为 www/myfolder)。当我尝试访问 127.0.0.1/myfolder 时,出现以下错误:

Forbidden
You don't have permission to access / on this server.

检查 apache 日志文件,这是我得到的错误:

[Thu Oct 24 14:00:24.830700 2019] [access_compat:error] [pid 61703] [client 127.0.0.1:57804] AH01797: client denied by server configuration: /users/admin/Library/Mobile Documents/com~apple~CloudDocs/www/myfolder/public_html/

我在这里缺少什么?请帮忙,我需要工作:D

【问题讨论】:

  • 您是否检查了 www 及其父目录的权限、所有权和组? apache 用户及其组应该可以访问所有内容
  • @niklaz 感谢您的回复,www fodler 已设置为每个人。 /users/admin/Library/Mobile Documents/com~apple~CloudDocs 也需要吗?
  • @niklaz 我刚刚添加了新信息,请帮助:D
  • 您需要在父目录的所有上设置目录权限,以允许apache用户/组访问:/users/users/admin/users/admin/Library,@ 987654329@和/users/admin/Library/Mobile Documents/com~apple~CloudDocs,除了www
  • @Z4-tier 我需要在 httpd.conf 上添加更多内容吗?

标签: apache icloud macos-catalina icloud-drive


【解决方案1】:

我看到的第一件事是您在目录块中使用 Apache 2.4 样式语法,但是在您的错误日志中,引发错误的模块是 access_compat。根据 Apache 文档:

mod_access_compat 提供的指令已被 mod_authz_host 弃用。将 Order、Allow 或 Deny 等旧指令与 Require 等新指令混合在技术上是可行的,但不鼓励。创建此模块是为了支持仅包含旧指令的配置,以促进 2.4 升级

下一条线索是错误代码:AH01797。这是由server configuration issue引起的:

客户端被服务器配置拒绝

此错误意味着对文件系统上目录的访问被 Apache 配置拒绝。

我在这里假设您实际上使用的是 2.4,并且错误地启用了 access_compat

再次查看您的配置文件,找到正在加载mod_access_compatLoadModule 指令,并将其注释掉。它可能在您的httpd.conf 文件中,但是有许多不同的方式来组织和配置 Apache 安装,所以它可能在其他地方。如果您有 Debian 风格的安装,您需要删除符号链接 /etc/apache2/mods_enabled/mod_access_compatGrep -R access_compat * 可能会有所帮助。

编辑另外 2 个观察结果:

  1. 在第二个directory 节中,你有
Allow from all
Require all granted

这将旧指令语法与新指令语法混合在一起,也是多余的。再次禁用access_compat,并在重新启动Apache 之前删除Allow from all 行。

  1. 我认为第二个directory 节甚至没有必要。您可能可以删除整个块并重新启动服务器,它会工作。

首先尝试 (1) 禁用 access_compat 并从您的 httpd.conf 文件中删除该 Allow 指令,然后使用 apache2ctl -k graceful 重新启动 apache。如果这不起作用,请注释掉整个第二个 directory 节并重新启动。

我有 50% 的把握这会解决它。如果没有,那么我真的需要查看您的整个 httpd.conf 文件,然后才能进一步排除故障。

【讨论】:

  • 感谢您的回答,这样做了(评论 mod_access_compat),但现在我得到的只是这个错误:“无法访问此站点127.0.0.1 拒绝连接。”......也许我需要重启吗?
  • 好吧,我没有评论,它恢复正常,但我不能只访问 www 的特定子文件夹...
  • @delphirules 您的配置文件之一可能包含语法要求access_compat 的指令。在不知道您使用的 Apache 版本或配置文件的内容的情况下,它必须确定是否涉及该模块。我在原始帖子上留下了另一条评论,但我不确定目录权限是这里问题的(唯一)来源。 AH01797 专门记录为由 Apache 服务器配置引起的。 httpd.conf 的其他部分或其他配置文件中可能存在阻止访问该位置的指令。
  • 服务器版本:Apache/2.4.41 (Unix) 服务器构建时间:2019 年 8 月 29 日 19:01:57
  • 只是出于好奇,是 Edit: #1 还是 Edit: #2 干的?
猜你喜欢
  • 2015-11-24
  • 2015-01-08
  • 1970-01-01
  • 2014-02-09
  • 2014-08-07
  • 2021-03-18
  • 2019-10-16
  • 2022-10-26
  • 1970-01-01
相关资源
最近更新 更多