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
):
- 与默认目录权限相同:
drwx------. 2 nginx root
- 完全访问权限:
drwxrwxrwx. 2 nginx nginx
但这不起作用(同样的错误)。
如果我在终端中以 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
我对 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
):
- 与默认目录权限相同:
drwx------. 2 nginx root
- 完全访问权限:
drwxrwxrwx. 2 nginx nginx
但这不起作用(同样的错误)。 如果我在终端中以 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