Nginx не может получить доступ к сокету uWSGI unix в CentOS 7
Я настроил uWSGI для обслуживания моего приложения Django в сокете unix, а Nginx в качестве прокси для этого сокета. Сервер работает под управлением CentOS 7. Я думаю, что я настроил Nginx так, чтобы у него было разрешение на чтение и запись в сокет uWSGI, но я все еще получаю ошибку "Отказано в доступе". Почему Nginx не может получить доступ к сокету uWSGI в CentOS 7?
[uwsgi]
socket=/socket/uwsgi.sock
virtualenv=/home/site/virtsite/
chdir=/home/site/wsgitest/
module=wsgitest.wsgi:application
vhost = true
master=True
workers=8
chmod-socket=666
pidfile=/home/site/wsgitest/uwsgi-master.pid
max-requests=5000
chown-socket=nginx:nginx
uid = nginx
gid = nginx
listen.owner = nginx
listen.group = nginx
server {
listen 80;
location / {
uwsgi_pass unix:///home/site/wsgitest/uwsgi.sock;
include uwsgi_params;
}
}
uwsgi --ini uwsgi.ini (as root)
ls -l /home/site/wsgitest/uwsgi.sock
srwxrwxrwx. 1 nginx nginx 0 Oct 13 10:05 uwsgi.sock
2014/10/12 19:01:44 [crit] 19365#0: *10 connect() to unix:///socket/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: 2.191.102.217, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///socket/uwsgi.sock:", host: "179.227.126.222"
3 ответа
Конфигурации Nginx и uWSGI верны. Проблема в том, что SELinux отказал Nginx в доступе к сокету. Это приводит к общей ошибке отказа в доступе в журнале Nginx. Важные сообщения на самом деле находятся в журнале аудита SELinux.
# show the new rules to be generated
grep nginx /var/log/audit/audit.log | audit2allow
# show the full rules to be applied
grep nginx /var/log/audit/audit.log | audit2allow -m nginx
# generate the rules to be applied
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
# apply the rules
semodule -i nginx.pp
Возможно, вам придется генерировать правила несколько раз, пытаясь получить доступ к сайту после каждого прохода, поскольку первая ошибка SELinux может быть не единственной, которая может быть сгенерирована. Всегда проверяйте политику, которая audit2allow
предлагает создать.
Эти шаги были взяты из этого поста в блоге, который содержит более подробную информацию о том, как исследовать и какой результат вы получите.
Настройте свой uwsgi.ini с помощью пользователей uid и gid.
#uwsgi.ini
uid = nginx
gid = nginx
С Уважением,
Я хотел бы прокомментировать:(Все выглядит хорошо, кроме пути сокета Unix
unix:///socket/uwsgi.sock failed (2: No such file or directory)
Документы говорят, что у него есть только одна косая черта
uwsgi_pass unix:/tmp/uwsgi.socket;