(13: Дозвіл відхилено) під час підключення до висхідного потоку: [nginx]


296

Я працюю над налаштуванням проекту Django з Nginx та Gunicorn.

Під час доступу до свого порту gunicorn mysite.wsgi:application --bind=127.0.0.1:8001на сервері Nginx я отримую таку помилку в моєму файлі журналу помилок;

30.05.2014 11:59:42 [критичний] 4075 # 0: * 6 підключення () до 127.0.0.1:8001 не вдалося (під час підключення до верхніх потоків, клієнт: 127.0.0.1, сервер: localhost, запит: "GET / HTTP / 1.1", upstream:, "http://127.0.0.1:8001/"хост: "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.

Яку помилку я роблю?

Відповіді:


680

У мене була подібна проблема, з якою 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


22
Дякую, що вирішили і мою проблему, я перебуваю на CentOS 7.
Джахан

21
Дякую. Мені потрібно було yum install policycoreutils-python, щоб audit2allowпершим дістатися . Довідка: centos.org/forums/viewtopic.php?t=5012
gross.jonas

Велике спасибі, це працює для мене за допомогою сервера вузлів. (Redhat 7)
BlaShadow

Дивіться також тут . У моєму випадку мені довелося додати nginx до групи користувача, у домашньому каталозі якого зберігався wwwroot.

1
У Fedora 23 встановлення команди policycoreutils-pythonне надало команди audit2allow. Після деяких досліджень я виявив, що вам слід встановити пакет devel yum install policycoreutils-devel. Довідка: danwalsh.livejournal.com/61710.html
Джозеф Н.

182

Я також зіткнувся з цією проблемою. Іншим рішенням є переключення булевого значення 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

1
Це спрацювало, дякую. Я оновив з CentOS 6.5 -> 6.7, і це повинно було дефолтувати значення для вимкнення під час оновлення, оскільки воно працювало нормально перед оновленням. Просте виправлення.
Майк Перселл

16

Мав подібну проблему з Centos 7. Коли я намагався застосувати розчин, призначений Соріном, я почав рухатись циклами. Спершу мені було дозволено {write} відмовлено. Потім, коли я вирішив, що мені було дозволено {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

Отримано за допомогою судового кота /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, відхилено


14

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

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

user nginx; # Default Nginx user

Змініть nginx на ім’я вашого поточного користувача - тут, мулагала .

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

Однак це може не вирішити фактичну проблему і може мати фактичні побічні ефекти.

Для ефективного рішення зверніться до рішення Джозефа Барбера .


Дякую, що допомогли мені в цьому
Overlord

4

якщо помилка "502 Bad Gateway" кидається на centos api url для проксі-шлюзу api-шлюзу на nginx, виконайте наступну команду для вирішення проблеми

sudo setsebool -P httpd_can_network_connect 1

2

13-дозвіл-відмовлено-під час підключення-до-upstreamnginx на сервері centos -

setsebool -P httpd_can_network_connect 1


1

Я також зіткнувся з цією проблемою. Я використовую Nginx з HHVM, нижче рішення виправлено мою проблему:

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

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

1
  1. Перевірте користувача в /etc/nginx/nginx.conf
  2. Змінити право власності на користувача.
sudo chown -R nginx:nginx /var/lib/nginx

А тепер подивіться магію.


0

Дуже дякую. Я застосував цей посібник для: Centos 7, AspNet Core 3.1, налаштування Nginx.


0

Дякую всім за відповіді. Відповідь Кумара 21 серпня 1919 року о 12:14 дала мені перепочинок після кількох днів усунення неполадок у мене, тобто:

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

Я застосував рішення:

setsebool -P httpd_can_network_connect 1

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

sudo semodule -i mynginx.pp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.