【问题标题】:Linux (Centos) and Nginx permissions on another disk另一个磁盘上的 Linux (Centos) 和 Nginx 权限
【发布时间】:2023-03-11 04:37:01
【问题描述】:

我对 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 用户身份登录,我可以在此目录中访问/创建文件。错误仅在 nginx 服务器内部。

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

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

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

我想为 Linux 中的特定驱动器/磁盘授予用户“nginx”的授权访问权限吗?

【问题讨论】:

    标签: linux nginx


    【解决方案1】:

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

    setenforce 0
    

    【讨论】:

      【解决方案2】:

      我遇到了几乎完全相同的问题,是的,它是由 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

      【讨论】:

        【解决方案3】:

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

        chcon -R -t httpd_sys_content_rw_t /data/tmp
        

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

        systemctl reload nginx.service
        

        【讨论】:

          猜你喜欢
          • 2021-09-18
          • 2013-06-26
          • 2020-08-25
          • 2021-09-05
          • 2015-03-21
          • 2020-02-08
          • 2020-03-18
          • 2019-11-27
          • 1970-01-01
          相关资源
          最近更新 更多