NGINX/PHP 无法访问根目录外的文件

问题描述

我刚刚在 openbsd 服务器上安装了 NginxPHP72 来设置网站。我的网站根目录位于 /var/www/html 中,并且想要访问我存储在 /var/cache/ 中的一些 XML 文件。 问题是,当我尝试检查 file_exists('var/cache/file.xml') 时,它说它不存在,但它确实存在!

经过一些“调试”并使用 $_SERVER['DOCUMENT_ROOT'] 说根目录的路径是:/www/html 但服务器上的真实路径是 /var/www/html 所以不知何故PHP/Nginx 无法检测到我需要的 /var,因为我已经放置了我的 xml 文件

是否可以在 PHP.ini 或 PHP-fpm.conf 中输入一些内容以使 PHP 能够读取此路径?

希望我确实为您解释了正确的内容,并且您理解我在这里的意思。

解决方法

我相信这是因为 nginx 在 OpenBSD 中内置了 chroot。

https://man.openbsd.org/OpenBSD-5.4/nginx.8

尝试使用 -u 标志启动 nginx。它将禁用 chroot/jail 并允许在 nginx 中运行的脚本访问文件系统上的其他路径。

来自文档:

默认情况下,nginx 将 chroot(2) 到运行守护进程的用户的主目录,通常是“www”,或者到 nginx.conf 中用户的主目录。 -u 选项禁用此行为,并将 nginx 返回到原始的“不安全”行为。