我已经在其目录中为虚拟服务器定义了自定义 error_log,如下所示:
server {
listen 80;
server_name www.example.com;
root /home/www.example.com;
error_log /home/www.example.com/error.log;
}
这是我的 nginx.conf:
user nginx;
pid /run/nginx.pid;
worker_processes 1;
Nginx 以 root 身份启动并执行命令没有任何问题:
nginx -t
nginx
但是当我尝试使用 systemctl 启动它时它无法启动并且状态显示如下:
nginx: [emerg] open() "/home/www.example.com/error.log" failed (13: Permission denied)
这是我的 nginx.service:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
我几乎尝试过所有方法,例如将 Web 目录的用户:组更改为 nginx:nginx。即使我删除了 error_log,它也会开始使用 systemctl,但无法访问 Web 目录,尽管它是在同一个用户下运行的。
我不明白为什么 nginx 使用 systemctl 启动时无法访问该目录,而直接启动时却可以访问。
我在 centos 7 上。
答案1
SELinux 可能不允许 nginx 访问该/home
目录。尝试将根目录更改/var/www
为进行测试。此外,在启动 nginx 时运行journalctl -x
在不同的会话中查看错误消息并将其发布在这里。
答案2
对另一个问题的回答可能会对将来遇到此问题的人有所帮助;它提供了大量与 Web 服务器和 SELinux 相关的详细信息:https://serverfault.com/a/551801/101931
答案3
这就是我解决问题的方法nginx 手册
#semanage permissive -a httpd_t
答案4
可能原因是 SELinux。尝试编辑 /etc/sysconfig/selinux
// # SELINUX=enforcing
SELINUX=disabled
使配置通过重新启动立即生效