我的中有以下行(加上上下文)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
服务时,它也会正常启动。
我需要了解造成这种情况的原因,以便我可以编写自动化和配置管理程序,使其开箱即用。我的两个假设是:
- 这是 SELinux 问题,服务/二进制文件
nginx-debug
具有不同的标签/限制nginx
。 - 启动时的预检
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/