Frage connect () ist fehlgeschlagen (111: Verbindung abgelehnt), während die Verbindung zum Upstream hergestellt wurde


Ich erlebe 502 Gateway Fehler beim Zugriff auf eine PHP-Datei in einem Verzeichnis (http://example.com/dev/index.php). Die Protokolle sagen das einfach so:

2011/09/30 23:47:54 [error] 31160#0: *35 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: domain.com, request: "GET /dev/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "domain.com"

Das habe ich noch nie erlebt. Was ist die Lösung für diese Art von 502 Gateway Error?

Dies ist das nginx.conf:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

67
2017-09-30 21:59


Ursprung


'Verbindung verweigert' bedeutet, dass das Backend nicht auf den Port 9000 hört oder seine Warteschlange voll ist. Dieses Problem hängt mit dem Backend ITSEF zusammen. Können Sie localhost 9000 telnet? Sie sollten auch Ihre Back-End-und PHP-Protokolle überprüfen. - Andrew
Mein Beitrag wurde aktualisiert. Ich konnte nicht zu localhost 9000 telnet. - MacMac
Derselbe Fehler, mit dem ich dich konfrontiert habe Geben Sie die Linkbeschreibung hier ein kann dir helfen - Tripathi29


Antworten:


Es klingt, als hättest du das Backend für Nginx nicht gestartet und konfiguriert. Start php-fpm und füge folgendes hinzu: nginx.conf, in dem http Kontext:

server {
    listen 127.0.0.1;
    server_name localhost;

    error_log /var/log/nginx/localhost.error_log info;

    root /var/www/localhost/htdocs;

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        fastcgi_intercept_errors        on;
        error_page 404 /error/404.php;
    }
}

35
2017-10-01 11:03



Danke Mann, es hat funktioniert, ich hatte es nicht php-fpm Eingerichtet. Prost. - MacMac
Du bist pures Genie. Ich kann nicht glauben, dass 1,0000000 Millionen Guides ich darüber gelesen habe, NOBODY erwähnt, dass Sie ein "listen 127.0.0.1" setzen müssen, um das Backend zu aktivieren. Du hast mich vor einem Alptraum gerettet !!!
Sie sollten überlegen, den Unix-Socket zu verwenden. Sehen Sie es mit an netstat -l und sehen für /var/run/php5-fpm.sock (Die Konfiguration dafür ist normalerweise in /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket> - JohannesM
du wirst haben listen = /var/run/php5-fpm.sock Innerhalb /etc/php5/fpm/pool.d/www.conf. aber du wirst wollen listen = 9000 und ;listen = /var/run/php5-fpm.sock. wenn du wie ich wärst. (Oder alternativ könnten Sie einen weisen Hinweis von Johannes M. hören, von dem ich mir vorstelle, dass er Sie mit so etwas zurücklassen würde fastcgi_pass unix:/var/run/php5-fpm.sock;irgendwo in deinem nginx.conf) - n611x007
Das gleiche Problem mit PHP 7.2. Was meinst du mit Hinzufügen der Datei im httpd-Kontext? Wäre das eine zusätzliche conf-Datei in / etc / nginx / sites-available / ordner oder was? - PeterKA


Diese Antwort ist nur für diejenigen, die einen Fehler wie folgt bekommen:

connect () fehlgeschlagen (111: Verbindung abgelehnt) während der Verbindung mit dem Upstream, Client ....   fastcgi: // [:: 1]: 9000

Schreiben Sie Ihre Nginx-Konfiguration neu, um ip zu verwenden, nicht DNS. Zum Beispiel, 127.0.0.1 anstatt localhostoder entfernen Sie den ipv6-Alias ​​von / etc / hosts.


38
2018-02-18 15:58



Du hast mir in die richtige Richtung gezeigt! Ich benutze nur listen 80 war gut (und es gibt viele Beispiele da draußen), aber ich dachte nicht, dass sowohl IPv4 (127.0.0.1) und IPv6 ([::1]) Adressen. - glarrain
Ich musste umziehen listen 80 default_server zu listen 0.0.0.0:80. - givanse
Kannst du darauf hinweisen? Warum Das sollte helfen? - kaiser
Bei den meisten Linux-Distributionen ist ipv6 im Netzwerk aktiviert, aber nicht alle Pakete, die für ipv6 konfiguriert sind. Meiner Meinung nach, wenn Nginx Verbindung zu Upstream initiiert, gibt der System Resolver zuerst IPv6-Adresse zurück. Php-fpm (Centos 7.x) hatte keine solchen Einstellungen von Box. Und die meisten Guides erklären alles in der ipv4-Version und vergessen IPv6-Futures, die deaktiviert oder benutzt werden sollten. - Quake1TF
Whooah, also [:: 1] ist localhost IPv6 Adresse! :) Vielen Dank! - lechup


Habe auch Fehler wie diese. Problem war mein abstraktes Backend, das auf zwei Server verweist. php-fpm war nur auf Socket auflisten ...

# Upstream to abstract backend connection(s) for php
upstream php {
        server unix:/var/run/php5-fpm.sock;
        #server 127.0.0.1:9000;
} 

server {
    [...]

    location ~ \.php$ {
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

            # With php5-fpm:
            fastcgi_pass php;
            fastcgi_index index.php;
            fastcgi_intercept_errors on;
            include fastcgi_params;
    }
}

3
2018-05-22 13:45





In meinem Fall war der Fehler ein fehlerhafter Speicherort für die Datei error_log für den php5.6-fpm-Dienst und somit für die Der Dienst php-fpm konnte nicht gestartet werden und nginx konnte keine Verbindung herstellen. Sie können es finden in /etc/php/5.6/fpm/php.ini (Sie können 5.6 durch die Version ersetzen, die Sie ausführen).


0
2017-07-30 15:03





Hatte das gleiche Problem mit Proxy-Anfragen an einen Knoten-Server, der Port 5000 überwacht. Anfragen würden mit ergeben 200 OK aber manchmal 502 Bad Gateway nach dem Zufallsprinzip. NGINX hat den Fehler angezeigt:

connect() failed (111: Connection refused) while connecting to upstream, client: ..., server: ...

Meine Lösung:

  1. Setzen Sie den Knoten HTTP-Server auf Hör mal zu ausschließlich für ipv4 durch including localhost als Host: server.listen(5000, 'localhost'); 
  2. Alle ipv6 listen Direktiven entfernt (listen [::]:80; oder listen [::]:443 ssl default_server;).
  3. Location Block Proxy_pass geändert, um IPs zu verwenden: proxy_pass http://127.0.0.1:5000 (nicht proxy_pass http://localhost:5000).

Hoffe, das hilft jemandem.


0
2017-07-05 10:05





Ich hatte das gleiche Problem und fügte die listen-Anweisung hinzu

listen 127.0.0.1;

hat für mich gearbeitet.

Interessanterweise habe ich noch andere Serverblöcke, die ohne diesen Spaß laufen!


-3
2017-11-26 22:48



Dies wurde bereits vor drei Jahren beantwortet und akzeptiert. - Sven♦