单个文件的 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:root
和 chown 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
就是这样。
我有一个简单的 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:root
和 chown 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
就是这样。