Nginx 无法使用 systemctl 启动

Nginx 无法使用 systemctl 启动

我已经在其目录中为虚拟服务器定义了自定义 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
使配置通过重新启动立即生效

相关内容