connect () non riuscito (111: connessione rifiutata) durante la connessione a monte


85

Riscontro 502 Gatewayerrori durante l'accesso a un file PHP in una directory ( http://example.com/dev/index.php). I registri dicono semplicemente questo:

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"

Non l'ho mai provato prima. Qual è la soluzione per questo tipo di 502 Gatewayerrore?

Questo è il 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/*;
}

1
"Connessione rifiutata" significa che il back-end non ascolta la porta 9000 o che la sua coda è piena. Questo problema è legato al backend itsef. Sei in grado di telnet localhost 9000? Dovresti anche controllare i log di backend e php.
Andrew,

Aggiornato il mio post. Non sono riuscito a
telnetare

Lo stesso errore che stavo affrontando, questa descrizione del collegamento qui può aiutarti
Tripathi29,

Risposte:


43

Sembra che tu non abbia avviato e configurato il backend per Nginx. Avviare php-fpme aggiungere quanto segue a nginx.conf, nel httpcontesto:

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

3
Grazie amico, ha funzionato, non l'ho php-fpminstallato. Saluti.
MacMac,

6
Sei puro genio. Non riesco a credere che 1,0000000 milioni di guide che ho letto su questo, NESSUNO menzioni che devi mettere un "ascolto 127.0.0.1" per abilitare il backend. Mi hai salvato da un incubo !!!

dovresti considerare di usare il socket unix. Visualizzalo con netstat -le vedi per /var/run/php5-fpm.sock(la configurazione per questo è normalmente in /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket>
JohannesM

2
avrai listen = /var/run/php5-fpm.sockdentro /etc/php5/fpm/pool.d/www.conf. ma tu vorrai listen = 9000e ;listen = /var/run/php5-fpm.sock. se tu fossi come me. (oppure, in alternativa, potresti ascoltare un saggio accenno di JohannesM. che immagino ti lascerebbe con qualcosa di simile a qualcosa fastcgi_pass unix:/var/run/php5-fpm.sock;nel tuo nginx.conf)
n611x007

Avere lo stesso problema con php 7.2. Cosa intendi per aggiungere il file nel contesto httpd? Questo sarebbe un file di configurazione aggiuntivo nella cartella / etc / nginx / sites-available / o cosa?
PeterKA,

47

Questa risposta è solo per coloro che ottengono un errore del genere:

connect () non riuscito (111: connessione rifiutata) durante la connessione a monte, client .... fastcgi: // [:: 1]: 9000

Riscrivi la tua configurazione nginx per usare ip, non dns. Ad esempio, 127.0.0.1invece di localhosto rimuovere l'alias ipv6 da / etc / hosts.


3
Hai indicato il mio nella giusta direzione! Pensavo che usare semplicemente listen 80andasse bene (e ci sono molti esempi là fuori con quello) ma non pensavo che implicasse indirizzi IPv4 ( 127.0.0.1) e IPv6 ( [::1]).
Glarrain,

5
Ho dovuto cambiare da listen 80 default_servera listen 0.0.0.0:80.
givanse,

Puoi indicare perché questo dovrebbe aiutare?
Kaiser

1
Poiché la maggior parte delle distribuzioni di Linux ha ipv6 abilitato in rete, ma non tutti i pacchetti configurati per l'uso di ipv6. A mio avviso, quando nginx avvia la connessione a monte, il risolutore di sistema restituisce per primo l'indirizzo ipv6. Php-fpm (centos 7.x) non aveva tali impostazioni dalla scatola. E la maggior parte delle guide spiega tutto in versione ipv4, dimenticando i futures ipv6 che dovrebbero essere disabilitati o usati.
Quake1TF,

Whooah, quindi [:: 1] è l'indirizzo IPv6 localhost! :) Grazie!
Lechup,

4

Anche errori come questo. Il problema era il mio backend astratto che faceva riferimento a due server. php-fpmstava elencando solo su socket ...

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

1

Si è verificato lo stesso problema con le richieste proxy a un server Nodo in ascolto sulla porta 5000. Le richieste sarebbero risultate con, 200 OKma a volte 502 Bad Gatewaycasualmente. NGINX ha mostrato l'errore:

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

La mia soluzione:

  1. Impostare il server HTTP nodo in modo che ascolti rigorosamente ipv4 includendo localhost come host:server.listen(5000, 'localhost');
  2. Rimossa qualsiasi direttiva di ascolto ipv6 ( listen [::]:80;o listen [::]:443 ssl default_server;).
  3. Blocco posizione proxy_pass modificato per utilizzare gli IP: proxy_pass http://127.0.0.1:5000(non proxy_pass http://localhost:5000).

Spero che questo aiuti qualcuno.


0

Nel mio caso l'errore era una posizione errata per il file error_log per il servizio php5.6-fpm e quindi il servizio php-fpm non si avviava e nginx non era in grado di connettersi ad esso . Puoi trovarlo in /etc/php/5.6/fpm/php.ini(puoi sostituire 5.6 con la versione che stai utilizzando).


-1

Proprio oggi ho riscontrato questo problema e per me è stato un problema di memoria insufficiente durante un periodo di carico elevato. Quindi il livellamento del tipo di istanza risolto il problema.


-4

Ho avuto lo stesso problema e l'aggiunta della dichiarazione di ascolto

listen 127.0.0.1;

ha funzionato per me.

È interessante notare che ho altri blocchi server che funzionano abbastanza felicemente senza questo!


3
Ciò è stato risposto e accettato già, tre anni fa.
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.