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

296

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

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

2014/05/30 11:59:42 [crit] 4075 # 0: * 6 не удалось подключиться () к 127.0.0.1:8001 (13: отказано в доступе) при подключении к восходящему каналу, клиенту: 127.0.0.1, серверу: localhost, запрос: "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.

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

Mulagala
источник

Ответы:

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

joebarbere
источник
22
Спасибо, это тоже исправило мою проблему, я нахожусь на CentOS 7.
Jahan
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
Sid
источник
1
Это сработало, спасибо. Я обновил CentOS 6.5 -> 6.7, и во время обновления значение по умолчанию было отключено, потому что до обновления оно работало нормально. Простое исправление.
Майк Перселл
16

У меня была похожая проблема с Centos 7. Когда я пытался применить решение, предписанное Сорином, я начал двигаться циклично. Сначала мне было отказано в разрешении. Затем, когда я решил, что мне было отказано в разрешении. Затем вернитесь снова к разрешению.

Следуя приведенному выше @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, запрещенной

unlockme
источник
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)

Тем не менее, это может не решить реальной проблемы и может иметь случайные побочные эффекты.

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

Mulagala
источник
Спасибо, что помогли мне в этом
Повелитель
4

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

sudo setsebool -P httpd_can_network_connect 1
Ежил Арасан
источник
2

13-denied-denied-while-connect-to-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

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

anjaneyulubatta505
источник
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
user386578
источник
-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
титан
источник