3

Я пытаюсь подключить Nginx к uWSGI, чтобы я мог запустить приложение, написанное на Ruby (где я не могу использовать пассажир). Это моя конфигурация виртуального хоста:

server {    
        listen unix:/var/run/nginx/redmine.sock;
        root /var/www/redmine/public;

        location / {
                try_files $uri @uwsgi;
        }

        location @uwsgi {
                include uwsgi_params;
                uwsgi_pass unix:/var/run/uwsgi/redmine.sock;
        }
}

Это просто, я пытаюсь найти статический файл, в противном случае я перехожу к прослушиванию uwsgi на сокете unix. Это касается меня ошибка 502 "плохой шлюз". Я пошел читать журналы ошибок, и у меня есть следующее:

2014/09/09 20:08:56 [crit] 20922#0: *29484 connect() to unix:/var/run/uwsgi/redmine.sock failed (13: Permission denied) while connecting to upstream, client: unix:, server: , request: "GET /redmine HTTP/1.0", upstream: "uwsgi://unix:/var/run/uwsgi/redmine.sock:", host: "localhost"

Но я был уверен, что настроил uWSGI для использования того же пользователя, что и Nginx:

user nginx;

а также

[uwsgi]
socket = /var/run/uwsgi/redmine.sock
chdir = /var/www/redmine
rails = .
plugins = 0:rack_ruby20
rack = config.ru
idle = 3600

chmod-socket = 660
chown-socket = nginx:nginx
uid = nginx
gid = nginx

И розетка это:

fenix ~ # ls -lh /var/run/uwsgi/redmine.sock 
srw-rw---- 1 nginx nginx 0 Set  9 20:08 /var/run/uwsgi/redmine.sock

Значит, Nginx не может даже читать и писать в свой сокет? Что это должно означать? Я не могу понять, как это сделать.

Я также заметил, что Nginx не будет работать, даже если разрешения сокетов 777.

1 ответ1

6

У меня была похожая проблема с разрешениями, и это было результатом того, что у SELinux не было политики для nginx писать в сокеты

Вы можете проверить сообщения SELinux AVC с помощью audit2why -al чтобы увидеть более подробную информацию об ошибке, что-то вроде

type=AVC msg=audit(1414460265.454:2612): avc:  denied  { connectto } for  pid=22107 comm="nginx" path="/tmp/uwsgi.sock" scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tclass=unix_stream_socket
Was caused by:
    Missing type enforcement (TE) allow rule.

    You can use audit2allow to generate a loadable module to allow this access.

Чтобы добавить политику принудительного применения для nginx, сначала подтвердите политику принудительного применения, выполнив

> grep nginx /var/log/audit/audit.log | audit2allow -m nginx

Вы должны увидеть вывод, похожий на

module nginx 1.0;

require {
    type unconfined_t;
    type httpd_t;
    type home_root_t;
    type soundd_port_t;
    class sock_file write;
    class unix_stream_socket connectto;
    class tcp_socket name_connect;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t home_root_t:sock_file write;

#!!!! This avc is allowed in the current policy
allow httpd_t soundd_port_t:tcp_socket name_connect;
allow httpd_t unconfined_t:unix_stream_socket connectto;

Наконец вы загружаете пользовательскую политику, запустив

> grep nginx /var/log/audit/audit.log | audit2allow -M nginx
> semodule -i nginx.pp 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .