如何让 NGinx 忽略文件权限?

如何让 NGinx 忽略文件权限?

我使用 NGinx 来提供静态站点,有时有些文件的权限是 640 而不是 644。对于这样的站点,NGinx 会显示“403 Forbidden”。

有什么办法告诉 NGinx 忽略文件权限并提供目录中的任何文件public

附言

是的,我可以使用 更改文件权限chmod,但是这种情况经常发生,我对此感到厌倦。

此外,我知道可能存在安全漏洞,但在这种情况下我并不关心它,public文件夹内的任何文件都应该对所有人开放。

答案1

你的问题毫无意义。

分配给 nginx 工作进程的用户/组对定义为用户指令. 更改它以便它具有与您的 OS 用户和组相关的读取权限。

答案2

文件权限在操作系统级别而不是在 nginx。因此,您需要使将文件放入目录的任何内容都更新权限,或者您需要更改 nginx 以便它作为具有读取文件权限的用户/组运行。

答案3

只有 root 拥有的进程才能访问所有内容,无论权限如何。nginx 确实不应该以 root 身份运行。

要做的是更改目录及其内容的 ACL,以便一个或多个用户或组可以拥有读取权限,而不管文件权限如何。man setfacl在操作之前,您应该先阅读一下,但这里有一个简短的说明:

首先,备份当前权限:

sudo getfacl -R /path/to/public_dir > /tmp/publicacl.bak

将读取权限应用于所有现有文件/path/to/public_dir及其所有子目录

sudo setfacl -R -m u:NGINXUSR:rX /path/to/public_dir 

为所有子目录设置默认 ACL /path/to/public_dir,该 ACL 将应用于在这些目录中创建或上传的所有新文件和目录

sudo setfacl -R -m d:u:NGINXUSR:rX /path/to/public_dir 

如果出现任何问题,您可以通过以下方式恢复到之前的 ACL:

sudo setfacl --restore=/tmp/publicacl.bak

答案4

简单的解决方案是运行一个 cron 作业,为 nginx 用户添加对公共文件夹中所有文件的读取权限,无论如何你都不关心公共文件夹中的读取权限

相关内容