(13: Berechtigung verweigert) beim Herstellen einer Verbindung zum Upstream: [nginx]

296

Ich arbeite mit der Konfiguration des Django-Projekts mit Nginx und Gunicorn.

Während ich auf meinen Port gunicorn mysite.wsgi:application --bind=127.0.0.1:8001im Nginx-Server zugreife , wird in meiner Fehlerprotokolldatei der folgende Fehler angezeigt.

30.05.2014 11:59:42 [krit] 4075 # 0: * 6 connect () zu 127.0.0.1:8001 fehlgeschlagen (13: Berechtigung verweigert) beim Herstellen einer Verbindung zum Upstream, Client: 127.0.0.1, Server: localhost, Anfrage: "GET / HTTP / 1.1", Upstream : "http://127.0.0.1:8001/", Host: "localhost: 8080"

Unten ist der Inhalt meiner nginx.confDatei;

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;
    }
}

In der HTML-Seite bekomme ich 502 Bad Gateway.

Welchen Fehler mache ich?

Mulagala
quelle

Antworten:

680

Ich hatte ein ähnliches Problem damit, dass Fedora 20, Nginx, Node.js und Ghost (Blog) funktionieren. Es stellte sich heraus, dass mein Problem auf SELinux zurückzuführen war .

Dies sollte das Problem lösen:

setsebool -P httpd_can_network_connect 1

Einzelheiten

Ich habe in den SELinux-Protokollen nach Fehlern gesucht:

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

Und festgestellt, dass das Ausführen der folgenden Befehle mein Problem behoben hat:

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

Verweise:

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
quelle
22
Danke, das hat auch mein Problem behoben, ich bin auf CentOS 7.
Jahan
21
Vielen Dank. Ich musste, yum install policycoreutils-pythonum zuerst zu kommen audit2allow. Referenz: centos.org/forums/viewtopic.php?t=5012
brutto.jonas
Vielen Dank, es funktioniert für mich mit einem Knotenserver. (Redhat 7)
BlaShadow
Siehe auch hier . In meinem Fall musste ich der Gruppe des Benutzers, in dessen Ausgangsverzeichnis die WWW-Wurzel gespeichert war, Nginx hinzufügen.
1
Auf Fedora 23 hat die Installation policycoreutils-pythonden Befehl nicht bereitgestellt audit2allow. Nach einigen Recherchen fand ich, dass Sie das Entwicklungspaket installieren sollten yum install policycoreutils-devel. Referenz: danwalsh.livejournal.com/61710.html
Joseph N.
182

Ich bin auch auf dieses Problem gestoßen. Eine andere Lösung besteht darin, den booleschen SELinux-Wert für die httpd-Netzwerkverbindung umzuschalten on(Nginx verwendet das httpd-Label).

setsebool httpd_can_network_connect on

Verwenden Sie das Flag -P, um die Änderung beizubehalten.

setsebool httpd_can_network_connect on -P

Sie können eine Liste aller verfügbaren SELinux-Booleschen Werte für httpd anzeigen, die http verwenden

getsebool -a | grep httpd
Sid
quelle
1
Das hat funktioniert, danke. Ich habe von CentOS 6.5 -> 6.7 aktualisiert und der Wert muss während des Updates standardmäßig deaktiviert sein, da es vor dem Update einwandfrei funktioniert hat. Einfache Lösung.
Mike Purcell
16

Hatte ein ähnliches Problem bei Centos 7. Als ich versuchte, die von Sorin vorgeschriebene Lösung anzuwenden, begann ich mich in Zyklen zu bewegen. Zuerst wurde mir eine Erlaubnis {Schreiben} verweigert. Als ich dann löste, dass mir eine Erlaubnis {connectto} verweigert wurde. Dann wieder zurück zur Erlaubnis {schreiben} verweigert.

Nach der obigen Antwort von @Sid, bei der die Flags überprüft getsebool -a | grep httpdund umgeschaltet wurden, stellte ich fest, dass zusätzlich zu httpd_can_network_connect deaktiviert ist. http_anon_write war ebenfalls deaktiviert, was dazu führte, dass die Berechtigung zum Schreiben verweigert und die Berechtigung verweigert wurde.

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

Erhalten mit sudo cat /var/log/audit/audit.log | grep nginx | grep bestritt wie oben erklärt.

Also löste ich sie einzeln und schaltete die Flaggen einzeln ein.

setsebool httpd_can_network_connect on -P

Führen Sie dann die oben unter @sorin und @Joseph angegebenen Befehle aus

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

Grundsätzlich können Sie die für setsebool festgelegten Berechtigungen überprüfen und diese mit dem Fehler korrelieren, der durch das Ablehnen von audit.log nginx erhalten wurde

entsperren
quelle
14

Ich habe mein Problem gelöst, indem ich mein Nginx als den Benutzer ausgeführt habe, mit dem ich derzeit angemeldet bin, Mulagala .

Standardmäßig wird der Benutzer als nginx ganz oben in der nginx.confDatei definiert (siehe unten).

user nginx; # Default Nginx user

Ändern Sie nginx in den Namen Ihres aktuellen Benutzers - hier Mulagala .

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

Dies kann jedoch möglicherweise das eigentliche Problem nicht lösen und kann tatsächlich gelegentliche Nebenwirkungen haben.

Eine effektive Lösung finden Sie in der Lösung von Joseph Barbere .

Mulagala
quelle
Vielen Dank, dass mir das geholfen hat
Overlord
4

Wenn der Fehler "502 Bad Gateway" die Centos-API-URL für den API-Gateway-Proxy-Pass auf Nginx auslöst, führen Sie den folgenden Befehl aus, um das Problem zu beheben

sudo setsebool -P httpd_can_network_connect 1
Ezhil Arasan
quelle
2

13-Erlaubnis-verweigert-während-Verbindung-zu-Upstreamnginx auf Centos-Server -

setsebool -P httpd_can_network_connect 1

Kumar
quelle
1

Ich bin auch auf dieses Problem gestoßen. Ich verwende Nginx mit HHVM. Die folgende Lösung hat mein Problem behoben:

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

sudo restorecon -R -v /etc/nginx/fastcgi_temp
sule
quelle
1
  1. Checken Sie den Benutzer ein /etc/nginx/nginx.conf
  2. Ändern Sie den Eigentümer in Benutzer.
sudo chown -R nginx:nginx /var/lib/nginx

Jetzt sieh die Magie.

anjaneyulubatta505
quelle
0

Ich danke dir sehr. Ich habe dieses Handbuch angewendet auf: Centos 7, AspNet Core 3.1, Nginx-Setup.

Quang Vu
quelle
0

Vielen Dank für die Antworten. Die Antwort von Kumar am 21. August 19 um 12:14 gab mir eine Pause nach einigen Tagen der Fehlerbehebung bei dem Problem, das ich hatte, dh:

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

Die Lösung, die ich angewendet habe, war wie folgt:

setsebool -P httpd_can_network_connect 1
user386578
quelle
-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
Titan
quelle