connect () falló (111: conexión rechazada) mientras se conectaba en sentido ascendente

85

Estoy experimentando 502 Gatewayerrores al acceder a un archivo PHP en un directorio ( http://example.com/dev/index.php). Los registros simplemente dicen esto:

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"

Nunca he experimentado esto antes. ¿Cuál es la solución para este tipo de 502 Gatewayerror?

Este es el 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/*;
}
MacMac
fuente
1
'Conexión rechazada' significa que el backend no escucha el puerto 9000 o su cola está llena. Este problema está relacionado con el backend itsef. ¿Eres capaz de telnet localhost 9000? También debe verificar sus registros de backend y php.
Andrew
Actualicé mi publicación. No pude telnet a localhost 9000.
MacMac
El mismo error que estaba enfrentando, esta descripción del enlace de entrada aquí puede ayudarlo
Tripathi29

Respuestas:

43

Parece que no ha comenzado y configurado el backend para Nginx. Inicie php-fpmy agregue lo siguiente a nginx.conf, en el httpcontexto:

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;
    }
}
quanta
fuente
3
Gracias hombre, funcionó, no lo había php-fpminstalado. Salud.
MacMac
66
Eres puro genio. No puedo creer 1.0000000 millones de guías que leí sobre esto, NADIE menciona que debe poner un "escuchar 127.0.0.1" para habilitar el backend. Me salvaste de una pesadilla !!!
deberías considerar usar el socket unix. Véalo con netstat -ly vea /var/run/php5-fpm.sock(la configuración para esto normalmente está en /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket>
JohannesM
2
Tendrás listen = /var/run/php5-fpm.sockdentro /etc/php5/fpm/pool.d/www.conf. pero querrás listen = 9000y ;listen = /var/run/php5-fpm.sock. si fueras como yo (o bien, alternativamente, se podía escuchar a sugerencia sabia por JohannesM que imagino que dejaría con algo parecido. fastcgi_pass unix:/var/run/php5-fpm.sock;alguna parte de su nginx.conf)
n611x007
Tener el mismo problema con php 7.2. ¿Qué quiere decir con agregar el archivo en el contexto httpd? ¿Sería este un archivo conf adicional en la carpeta / etc / nginx / sites-available / o qué?
PeterKA 01 de
47

Esta respuesta es solo para aquellos que obtienen un error como este:

connect () falló (111: Conexión rechazada) mientras se conectaba a upstream, cliente .... fastcgi: // [:: 1]: 9000

Vuelva a escribir su configuración nginx para usar ip, no dns. Por ejemplo, en 127.0.0.1lugar de localhost, o elimine el alias de ipv6 de / etc / hosts.

Quake1TF
fuente
3
¡Me apuntaste en la dirección correcta! Pensé que usar solo listen 80estaba bien (y hay muchos ejemplos con eso) pero no pensé que eso implicara direcciones IPv4 ( 127.0.0.1) e IPv6 ( [::1]).
Glarrain
55
Tuve que cambiar de listen 80 default_servera listen 0.0.0.0:80.
givanse
¿Puedes señalar por qué esto debería ayudar?
Kaiser
1
Debido a que la mayoría de las distribuciones de Linux tienen ipv6 habilitado en la red, pero no todos los paquetes configurados para el uso de ipv6. En mi opinión, cuando nginx inicia la conexión en sentido ascendente, la resolución del sistema devuelve primero la dirección ipv6. Php-fpm (centos 7.x) no tenía tales configuraciones de la caja. Y la mayoría de las guías explican todo en la versión ipv4, olvidando los futuros de ipv6 que deberían deshabilitarse o usarse.
Quake1TF
Whooah, entonces [:: 1] es la dirección IPv6 localhost! :) ¡Gracias!
lechup
4

Tengo errores como este también. El problema era mi backend abstracto que hacía referencia a dos servidores. php-fpmsolo figuraba en el 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;
    }
}
KumZ
fuente
1

Tenido el mismo problema con las solicitudes de proxy a un servidor de nodo escucha en el puerto 5000. Las solicitudes se traduciría con 200 OKpero en algún momento 502 Bad Gatewayal azar. NGINX mostró el error:

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

Mi solución:

  1. Configure el servidor HTTP del nodo para que escuche estrictamente ipv4 incluyendo localhost como host:server.listen(5000, 'localhost');
  2. Se eliminaron las directivas de escucha de ipv6 ( listen [::]:80;o listen [::]:443 ssl default_server;).
  3. Se cambió el bloque de ubicación proxy_pass para usar IP: proxy_pass http://127.0.0.1:5000(no proxy_pass http://localhost:5000).

Espero que esto ayude a alguien.

Niko Solihin
fuente
0

En mi caso, el error fue una mala ubicación para el archivo error_log para el servicio php5.6-fpm y, por lo tanto, el servicio php-fpm no se pudo iniciar y nginx no pudo conectarse a él . Puede encontrarlo en /etc/php/5.6/fpm/php.ini(puede reemplazar 5.6 con la versión que está ejecutando).

George Donev
fuente
-1

Justo hoy me encontré con este problema y para mí fue un problema de poca memoria durante un período de carga alta. Entonces subir de nivel el tipo de instancia solucionó el problema.

Romesh D. Niriella
fuente
-4

Tuve el mismo problema y agregué la declaración de escucha

listen 127.0.0.1;

trabajó para mi.

Curiosamente, tengo otros bloques de servidores que se ejecutan bastante bien sin esto.

Rob Ganly
fuente
3
Esto ya ha sido respondido y aceptado, hace tres años.
Sven