Я определил собственный журнал ошибок для виртуального сервера внутри его каталога, например:

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

Я почти пробовал что-то вроде изменения user: group веб-каталога на nginx: nginx. Даже если я удалю error_log, он начнет использовать systemctl, но не сможет получить доступ к веб-каталогу, хотя он работает под тем же пользователем.

Я не могу понять, почему nginx не может получить доступ к этому каталогу, когда он запускается с помощью systemctl, хотя у него есть доступ, когда он запускается напрямую.

Я на CentOS 7.

answer

SELinux, вероятно, не разрешает nginx доступ к /homeкаталогу. Попробуй сменить рут на /var/wwwв качестве теста. Также, когда вы запускаете nginx, запустите journalctl -xв другом сеансе, чтобы увидеть сообщения об ошибках и разместить их здесь.

Ответ на другой вопрос может помочь будущему искателю ответить на этот вопрос; он предоставляет изрядное количество деталей, связанных с веб-серверами и SELinux: https://serverfault.com/a/551801/101931

Вот как я решил это в соответствии с руководством по nginx

#semanage permissive -a httpd_t

Возможно, причина в SELinux. Попробуйте отредактировать / etc / sysconfig / selinux
// # SELINUX = enforcing
SELINUX = disabled,
чтобы конфигурация вступила в силу немедленно после перезагрузки