单个文件的 Nginx 403 错误,而其他文件工作

Nginx 403 error for single file while others work

我有一个简单的 Flask/Nginx 服务器和 3 个文件,位置 /opt/hosting/files:

[adam@localhost]$ namei -om /opt/hosting/files
    f: /opt/hosting/files
     dr-xr-xr-x root  root  /
     drwxr-xr-x root  root  opt
     drwxr-xr-x root  root  hosting
     drwxr-xr-x nginx nginx files

在文件夹 files 中,我有 3 个文件:两个图像和一个更大的 zip 文件:

[adam@localhost]$ ls -lh /opt/hosting/files/
total 424M
-rwx-----x. 1 nginx nginx  19K 03-06 01:29 file1.jpg
-rwx-----x. 1 nginx nginx  18M 03-06 03:34 file2.png
-rwxr-xr-x. 1 nginx nginx 406M 07-07 13:07 file3.zip

我正在提供这些文件,虽然前两个没有问题,但我通过 www 和使用 wget 获得了 zip 文件的 403 Forbidden。我认为目录权限设置正确,因为其他两个文件都很好。 Zip 文件属性甚至更高,因此这也不应该成为问题。

我尝试对文件和文件夹使用 chown root:rootchown 777,但无论如何都无法访问该文件。进行更改后,我将使用 sudo systemctl restart uwsgi 重新启动 nginx。 SELinux 显示 Enforcing.

这里有什么问题?

知道了。阅读 comment by tinesoft here 让我检查文件的 SELinux 上下文(是的,我是 运行 CentOS,忘了说)它是:

[adam@localhost]$ ls -lZ /opt/hosting/files
-rwx-----x. nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 file1.jpg
-rwx-----x. nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 file2.png
-rwxr-xr-x. nginx nginx unconfined_u:object_r:user_home_t:s0 file3.zip

然后,在 SELinux documentation from RedHat 之后,我设法使用

将 SELinux 上下文的类型从 user_home_t 更改为 httpd_sys_content_t
sudo chcon -t httpd_sys_content_t file3.zip

就是这样。