【问题标题】:NGINX/PHP cant access files outside root directoryNGINX/PHP 无法访问根目录外的文件
【发布时间】:2021-05-12 03:26:59
【问题描述】:

我刚刚在 openbsd 服务器上安装了 nginx 和 php72 来建立一个网站。我在 /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 能够读取此路径?

希望我对你的解释是正确的,并且你明白我在这里的意思。

【问题讨论】:

    标签: php nginx openbsd


    【解决方案1】:

    我相信是因为 OpenBSD 的 nginx 内置了 chroot。

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

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

    来自文档:

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

    【讨论】:

    • 啊啊好吧,还有其他方法吗?我的 xmls 有更好的地方吗?当我的网站根目录是 /var/www/html 时,将它们放在 /var/www 中是否安全?但也许我仍然无法访问 /var/www/html 之外的任何内容?因为当我尝试一个相对路径时:file_exists('../../cache/file.xml) 也不起作用
    • 所以我会将 nginx.conf 中的根设置为 /var/www/html/public 而不是 /var/www/html 并从 /var/www/cache 提供 xml?跨度>
    • 顺便说一句,非常感谢您的帮助。我是 openbsd 新手,所以不知道内置的 chroot
    • 我再次删除了该评论 :) 我没有看到您已经有一个子目录。只要将 nginx 中的根设置为子文件夹,例如/var/www/html 或 /var/www/html/public 你 chroot 是更高的东西,例如/var/www,你很好。然后用户只能访问该内部文件夹中的内容,但不能通过对您网站的简单 GET 请求来获取您的 xml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多