409 Stimmen

(13: Berechtigung verweigert) beim Verbinden mit upstream: [nginx]

Ich arbeite daran, ein Django-Projekt mit Nginx und Gunicorn zu konfigurieren.

Beim Zugriff auf meinen Port gunicorn mysite.wsgi:application --bind=127.0.0.1:8001 im Nginx-Server erhalte ich den folgenden Fehler in meiner Fehlerprotokolldatei;

2014/05/30 11:59:42 [crit] 4075#0: *6 connect() zu 127.0.0.1:8001 fehlgeschlagen (13: Keine Berechtigung) beim Verbinden mit dem Upstream, Client: 127.0.0.1, Server: localhost, Anfrage: "GET / HTTP/1.1", Upstream: "http://127.0.0.1:8001/", Host: "localhost:8080"

Unten steht der Inhalt meiner nginx.conf-Datei;

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

Auf der HTML-Seite erhalte ich 502 Bad Gateway.

Welchen Fehler mache ich?

8voto

anjaneyulubatta505 Punkte 8833
  1. Überprüfe den Benutzer in /etc/nginx/nginx.conf
  2. Ändere den Besitzer auf den Benutzer.

    sudo chown -R nginx:nginx /var/lib/nginx

8voto

shilovk Punkte 9225
  1. Um zuerst zu sehen, was verweigert ist:

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

    type=AVC msg=audit(1618940614.934:38415): avc: denied { connectto } for pid=18016 comm="nginx" path="/home/deployer/project/tmp/sockets/puma.sock" scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tclass=unix_stream_socket permissive=1

  2. In meinem Fall hilft das auf CentOS7:

    sudo setenforce 0

    setsebool httpd_can_network_connect on -P setsebool httpd_can_network_relay on -P

Nachdem kannst du sehen, was aktiviert ist:

getsebool -a | grep httpd

httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> on
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> on
httpd_can_network_memcache --> off
httpd_can_network_relay --> on
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> off
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_ipa --> off
httpd_run_preupgrade --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off

7voto

Surakshith Punkte 71

Ich hatte das gleiche Problem. Ich habe die Lösung von @joebarbere ausprobiert, indem ich den folgenden Befehl ausgeführt habe, was das Problem behoben hat, aber ich war besorgt über die Sicherheit

setsebool -P httpd_can_network_relay 1

Dann bin ich auf die folgende Lösung gestoßen

https://serverfault.com/questions/634294/nodejs-nginx-error-13-permission-denied-while-connecting-to-upstream

Ich habe einen nicht standardmäßigen Port verwendet und SELinux hat den Port blockiert. Verwenden Sie den folgenden Befehl, um zu überprüfen, ob der Port erlaubt ist

sudo semanage port --list | grep 4343

Und habe den Port zur Liste der erlaubten Ports hinzugefügt

sudo semanage port --add --type http_port_t --proto tcp 4343

Ich habe den nginx-Dienst neu gestartet, dann war die URL zugänglich. Ich gehe davon aus, dass dies sicherer ist.

4voto

kumar Punkte 622

13-Zugriff verweigert beim Verbinden mit Upstream-Nginx auf dem CentOS-Server -

setsebool -P httpd_can_network_connect 1

2voto

Zubair Hassan Punkte 498

Ein weiterer Grund könnte sein; Sie greifen auf Ihre Anwendung über nginx mit Proxy zu, haben aber keine gunicorn.sock Datei für den Proxy mit gunicorn hinzugefügt.

Sie müssen einen Proxy-Dateipfad in der nginx-Konfiguration hinzufügen.

location / {
        include proxy_params;
        proxy_pass http://unix:/home/username/myproject/gunicorn.sock;
    }

Hier ist ein schönes Tutorial mit einer schrittweisen Implementierung davon

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04#configure-nginx-to-proxy-pass-to-gunicorn

Hinweis: Wenn Sie keine beliebigenNamen.sock Datei erstellt haben, müssen Sie sie zuerst erstellen, verwenden Sie entweder die obige Methode oder ein anderes Tutorial, um sie zu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X