Я определил пользовательский 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 запускается как корень с, он - команды без проблем:
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, в то время как он имеет доступ, когда он запускается непосредственно.
Я нахожусь на песнях 7.
SELinux, вероятно, не разрешает nginx доступ к каталогу / home
. Попробуйте изменить корень на / var / www
в качестве теста. Также, когда вы запускаете nginx, запустите journalctl -x
в другом сеансе, чтобы увидеть сообщения об ошибках и разместить их здесь.
Возможно, причина в SELinux. Попробуйте отредактировать / etc / sysconfig / selinux
// # SELINUX = принудительное применение
SELINUX = отключено
сделайте настройку действующей немедленно после перезагрузки
Ответ на другой вопрос может помочь будущему искателю ответить на этот вопрос; он предоставляет достаточно подробных сведений о веб-серверах и SELinux: https://serverfault.com/a/551801/101931
Вот как я решил это согласно мануалу nginx
#semanage permissive -a httpd_t