【问题标题】:NGINX (Operation not permitted) while reading upstreamNGINX(不允许操作)同时读取上游
【发布时间】:2018-01-19 20:57:17
【问题描述】:

我将 NGINX 用作缓存引擎,并且可以确认页面正在被缓存以及从缓存中提供服务。但是错误日志中充满了这个错误:

2018/01/19 15:47:19 [暴击] 107040#107040: *26 chmod() “/etc/nginx/cache/nginx3/c0/1d/61/ddd044c02503927401358a6d72611dc0.0000000007” 读取上游时失败(1:不允许操作),客户端: xx.xx.xx.xx,服务器:*.---.com,请求:“GET /support/applications/ HTTP/1.1", 上游: "http://xx.xx.xx.xx:80/support/applications/", 主机:“---.com”

由于 NGINX 正在工作,我不太确定这个错误的根源是什么。这些错误可以安全地忽略吗?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    看起来您正在使用 nginx 代理缓存,但 nginx 没有能力操作其缓存目录中的文件。您需要在缓存目录上获得正确的所有权/权限。

    【讨论】:

    • 我同意,但如果这是真的,nginx 如何创建目录和插入文件?我检查了所有者,它显示为 root,如果我使用 chown 设置为 nginx 运行的 www-data 用户,似乎没有任何改变。
    【解决方案2】:

    原始问题中未解释的是,挂载的存储是 Azure 文件共享。因此,在 FSTAB 中,我必须包含所需所有者的 gid= 和 uid=。这随后消除了对 chown 的需要,并且 chmod 也变得不必要了。这消除了 chmod() 错误,但又引入了另一个错误。

    然后我在 rename() 上遇到错误,没有执行此操作的权限。在这一点上,我放弃了我正在做的事情,转移到不同类型的 Azure 存储(特别是连接到 VM 的磁盘),所有这些问题都消失了。

    所以我提供这个作为答案,但实际上,问题并没有解决。

    【讨论】:

      【解决方案3】:

      我们注意到了同样的问题。按照 Microsoft @https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv#create-a-storage-class 的指南似乎已经修复了它。

      在我们的例子中,nginx 进程为工作线程使用了不同的用户,因此我们需要找到该用户的 uid 和 gid 并在 StorageClass 定义中使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-24
        • 1970-01-01
        • 2015-02-04
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 2017-08-16
        • 2022-08-24
        相关资源
        最近更新 更多