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;
Другие вопросы по тегам