(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?

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


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

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


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 .


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

2

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

setsebool -P httpd_can_network_connect 1


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

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.


0

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


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

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

sudo semodule -i mynginx.pp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.