我使用 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 用户添加对公共文件夹中所有文件的读取权限,无论如何你都不关心公共文件夹中的读取权限