![使用 PHP-FPM 时 www-data 仍然需要对 htdocs 具有读取和执行权限,这正常吗?](https://linux22.com/image/624779/%E4%BD%BF%E7%94%A8%20PHP-FPM%20%E6%97%B6%20www-data%20%E4%BB%8D%E7%84%B6%E9%9C%80%E8%A6%81%E5%AF%B9%20htdocs%20%E5%85%B7%E6%9C%89%E8%AF%BB%E5%8F%96%E5%92%8C%E6%89%A7%E8%A1%8C%E6%9D%83%E9%99%90%EF%BC%8C%E8%BF%99%E6%AD%A3%E5%B8%B8%E5%90%97%EF%BC%9F.png)
我已经设置了 Apache+PHP-FPM 环境,并在 PHP-FPM 池文件中设置了以下内容:
[www]
user = mary
group = mary
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 8
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 50
一切正常。我已经在 phpinfo 中确认它正在 PHP-FPM 中运行,并且它也以用户身份运行,mary
代码如下:
<?php
echo `whoami`;
?>
我已递归设置了 0750 权限htdocs
(此文件夹内的所有内容也继承了这些权限):
owner: mary RWX
group: www-data RX
运行良好。但由于我是以mary
PHP-FPM 方式运行的,我认为 Apache 实际上不需要访问htdocs
。
因此,我尝试htdocs
以递归方式将 0700 设置为 on,这实际上意味着仅允许所有者mary
对此文件夹拥有 RWX 权限。但是当我访问 中的页面时,权限被拒绝htdocs
,而使用 0750 时不会发生这种情况。
htdocs
为什么在这种情况下Apache 仍然需要访问?
答案1
Apache 正在读取您的文件,然后将其传递给 php-fpm。由于不授予 Apache 访问该文件的权限,它无法将该文件传递给解释器。它必须具有这些文件的读取权限。
答案2
我的猜测是 PHP 可能以 mary 的身份运行,但 apache 在执行之前仍然需要 rx 来读取 php 文件。
答案3
请向我们展示您连接 php-fpm 和 apache 的方式,Apache 端肯定有一些目录 - 或类似的 - 指令,或者您可能使用了 mod_proxy_fcgid?
如果不是,那么 Apache 肯定会在测试任何 fastcgi 任务之前禁止访问。使用 Apache 中的调试日志级别肯定可以显示允许和不允许 apache 访问目录的请求之间的差异。