Я работаю над настройкой проекта 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
.
Какую ошибку я делаю?
У меня была аналогичная проблема: Fedora 20, Nginx, Node.js и Ghost (blog) работают. Оказывается, моя проблема связана с 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
Я тоже сталкиваюсь с этой проблемой. Другое решение - переключить логическое значение 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
Я решил свою проблему, запустив мой nginx в качестве моего текущего рабочего пользователя, который mulagala
. По умолчанию пользователь как nginx
в моем файле nginx.conf
. Мы можем найти эту строку в верхней части nginx.conf
файл.
user nginx;
измените это на ваше текущее имя рабочего пользователя, например
user mulagala;
Была аналогичная проблема на 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
Я тоже сталкиваюсь с этой проблемой. Я использую Nginx с HHVM, ниже решения исправлено мое сообщение:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"
sudo restorecon -R -v /etc/nginx/fastcgi_temp
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp