(13: Разрешение отказано) при подключении к восходящему потоку: [nginx]

Я работаю над настройкой проекта Django с помощью Nginx и Gunicorn.

Когда я получаю доступ к своему порту gunicorn mysite.wsgi:application --bind=127.0.0.1:8001 на сервере Nginx, в моем файле журнала ошибок появляется следующая ошибка:

2014/05/30 11:59:42 [crit] 4075#0: *6 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET/HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "localhost:8080"

Ниже приведено содержимое моего файла nginx.conf;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

На странице HTML я получаю 502 Bad Gateway.

Какую ошибку я делаю?

Ответ 1

У меня была похожая проблема с работой Fedora 20, Nginx, Node.js и Ghost (блог). Оказывается, моя проблема была связана с SELinux.

Это должно решить проблему:

setsebool -P httpd_can_network_connect 1

подробности

Я проверил ошибки в журналах SELinux:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

И обнаружил, что выполнение следующих команд исправило мою проблему:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

Рекомендации:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxproblems.org/wiki/Selinux

Ответ 2

Я тоже сталкиваюсь с этой проблемой. Другое решение - переключить логическое значение SELinux для подключения httpd к on (Nginx использует метку httpd).

setsebool httpd_can_network_connect on

Чтобы сохранить сохранение, используйте флаг -P.

setsebool httpd_can_network_connect on -P

Вы можете просмотреть список всех доступных SELinux булевых для httpd, используя

getsebool -a | grep httpd

Ответ 3

Была аналогичная проблема на Centos 7. Когда я попытался применить решение, предписанное Сорином, я начал двигаться в цикле. Сначала у меня было разрешение {write} denied. Затем, когда я решил, что у меня есть разрешение {connectto}, отказано. Затем вернитесь к разрешению {write}.

После @Sid ответьте выше, проверяя флаги с помощью getsebool -a | grep httpd и переключая их, я обнаружил, что в дополнение к отключению httpd_can_network_connect. http_anon_write также был отключен, в результате чего было отказано в разрешении на запись и разрешено разрешение {connectto}

type=AVC msg=audit(1501830505.174:799183): avc:  
denied  { write } for  pid=12144 comm="nginx" name="myroject.sock" 
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:default_t:s0 tclass=sock_file

Получено с использованием   sudo cat/var/log/audit/audit.log | grep nginx | grep отказано как описано выше.

Итак, я решил их по одному, переключая флаги по одному за раз.

setsebool httpd_can_network_connect on -P

Затем выполните команды, указанные @sorin и @Joseph выше

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 
audit2allow -M mynginx
sudo semodule -i mynginx.pp

В основном вы можете проверить разрешения, установленные на setsebool, и сопоставить это с ошибкой, полученной из grepp'ing 'audit.log nginx, denied

Ответ 4

Я решил свою проблему, запустив свой Nginx от имени пользователя, с которым я в данный момент вошел, mulagala.

По умолчанию пользователь как nginx определен в самом верхнем разделе файла nginx.conf, как показано ниже;

user nginx; # Default Nginx user

Измените nginx на имя вашего текущего пользователя - здесь, Мулагала.

user mulagala; # Custom Nginx user (as username of the current logged in user)

Однако это может не решить действительную проблему и может привести к случайным побочным эффектам.

Для эффективного решения, пожалуйста, обратитесь к решению Джозефа Барбера.

Ответ 5

Я тоже сталкиваюсь с этой проблемой. Я использую Nginx с HHVM, ниже решения исправлено мое сообщение:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

sudo restorecon -R -v /etc/nginx/fastcgi_temp

Ответ 6

Если ошибка "502 Bad Gateway" генерируется в Centos Api URL для прохода прокси-шлюза API в nginx, выполните следующую команду, чтобы решить проблему.

sudo setsebool -P httpd_can_network_connect 1

Ответ 7

  1. Проверьте пользователя в /etc/nginx/nginx.conf
  2. Смена владельца на пользователя.
sudo chown -R nginx:nginx /var/lib/nginx

Теперь посмотри на магию.

Ответ 8

Спасибо, ребята :) теперь я могу использовать прокси Nginx для моего URL Kibana

действительно полезная команда :) setsebool -P httpd_can_network_connect 1

Ответ 9

13 -P отказано в доступе при подключении к восходящему каналу на сервере Centos -

setsebool -P httpd_can_network_connect 1

Ответ 10

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp