Linux (Centos) 和 Nginx 在另一个磁盘上的权限

Linux (Centos) and Nginx permissions on another disk

我对 nginx 和 linux (centos) 有疑问。 Nginx 使用磁盘作为大 POST 请求的临时缓冲区。 默认情况下,缓存位于此处:

/var/cache/nginx/client_temp/ (drwx------.  2 nginx root)

可以用,但是磁盘太小了。当您尝试上传大文件(或同时上传多个文件)时,磁盘已满。

因此我们添加了一个新磁盘 (/data) 并将 client_body_temp_path 参数更改为新磁盘 /data/tmp。 当我们尝试上传内容时,出现权限错误:

nginx: [emerg] mkdir() "/data/tmp" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

我更改此目录的权限 (chmod/chown):

但这不起作用(同样的错误)。 如果我在终端中以 nginx 用户身份登录,我可以在该目录中 access/create 文件。错误仅在 nginx 服务器内部。

有些奇怪: 如果目录位于分区上:

 /var/... => permission ok
 /tmp/... => permission ok
 /data/... => permission not ok

var 和 tmp 在同一个物理磁盘上(但分区不同)。数据是另一个磁盘。

我是否应该为 Linux 中的特定 drive/disk 授予用户 'nginx' 的授权访问权限?

我猜这个问题是由SELinux引起的,它使用不同的方式来管理权限。请尝试暂时关闭selinux并重试

setenforce 0

我遇到了几乎完全相同的问题,是的,它是由 SELinux 引起的。

以下是对我有用的方法:

chcon -v -R --type=httpd_sys_content_t <www-root>

这将递归修改目标目录中的文件"label"以允许nginx("context" httpd_t)访问它。

我的计算参考:NGINX: SELinux Changes when Upgrading to RHEL 6.6 / CentOS 6.6

Nginx 可以访问 /var 和 /tmp,因为 SELinux 将它们视为 well-known 位置并默认授予权限。对于其他位置,您必须明确授予权限:

chcon -R -t httpd_sys_content_rw_t /data/tmp

并且记得重新加载nginx才能生效:

systemctl reload nginx.service