nginx 缓存目录创建——奇怪的行为

nginx 缓存目录创建——奇怪的行为

我的中有以下行(加上上下文)nginx.conf

http {
    proxy_cache_path cache/  keys_zone=auth_cache:10m;
    ...

由于nginx.conf在 中/etc/nginx,因此cache/对应于/etc/nginx/cache.drwxr-xr-x。5 root root 205 Jun 18 16:25/etx/nginx

(我也尝试过用绝对路径/apps/nginx/cache/

drwx------. 2 nginx nginx 6 Jun 18 14:42 /apps/nginx

无论是哪种情况,当我尝试

$ sudo systemctl start nginx

它失败了。journalctl -u nginx告诉我以下内容:

... nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
... nginx: [emerg] mkdir() "/etc/nginx/cache" failed (13: Permission denied)
... nginx: configuration file /etc/nginx/nginx.conf test failed

(在另一种情况下,它确实这么说"/apps/nginx/cache"。)

然后我尝试

$ sudo systemctl start nginx-debug

并且启动时没有任何问题、错误或警告日志。它会cache/在 中指定的任何位置创建目录nginx.conf,当我停止它并启动nginx服务时,它也会正常启动。

我需要了解造成这种情况的原因,以便我可以编写自动化和配置管理程序,使其开箱即用。我的两个假设是:

  1. 这是 SELinux 问题,服务/二进制文件nginx-debug具有不同的标签/限制nginx
  2. 启动时的预检nginx尝试以不同的非特权用户身份创建目录,但nginx-debug跳过这些检查,从而以 root 或 nginx 身份创建目录。

有什么办法可以有效查明真相吗?谢谢!

答案1

不确定这是否是 selinux 问题。最好的检查方法是禁用 selinux 并运行您的程序。

setenforce 0       //setenforce 1 (to refinforce)

如果是 selinux 问题,那么您可以尝试为缓存文件夹设置上下文。

sudo semanage fcontext -a -t httpd_cache_t "/etc/nginx/cache(/.*)?"
sudo restorecon -Rv /etc/nginx/

验证文件夹标签。

sudo ls -lZ /etc/nginx/

相关内容