connect () falhou (111: Conexão recusada) ao conectar-se ao upstream

85

Estou tendo 502 Gatewayerros ao acessar um arquivo PHP em um diretório ( http://example.com/dev/index.php). Os logs simplesmente dizem o seguinte:

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"

Eu nunca experimentei isso antes. Qual é a solução para esse tipo de 502 Gatewayerro?

Este é o 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
fonte
11
'Conexão recusada' significa que o back-end não escuta a porta 9000 ou sua fila está cheia. Esse problema está relacionado ao backend itsef. Você é capaz de telnet localhost 9000? Você também deve verificar seus logs de back-end e php.
Andrew
Atualizei minha postagem. Eu não poderia telnet para localhost 9000.
MacMac
O mesmo erro que eu estava de frente para você, esta indique descrição link aqui pode ajudá-lo
Tripathi29

Respostas:

43

Parece que você não iniciou e configurou o back-end para o Nginx. Inicie php-fpme adicione o seguinte a nginx.conf, no 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
fonte
3
Obrigado cara, funcionou, eu não tinha php-fpminstalado. Felicidades.
MacMac 01/10/11
6
Você é pura genialidade. Não acredito que 1.0000.000 milhões de guias que li sobre isso, NINGUÉM mencione que você deve colocar um "listen 127.0.0.1" para ativar o back-end. Você me salvou de um pesadelo !!!
você deve considerar usar o soquete unix. Veja-o com netstat -le veja-o /var/run/php5-fpm.sock(a configuração para isso normalmente está em /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket>
JohannesM
2
você terá listen = /var/run/php5-fpm.sockdentro /etc/php5/fpm/pool.d/www.conf. mas você vai querer listen = 9000e ;listen = /var/run/php5-fpm.sock. se você fosse como eu. (ou então, em alternativa, você pode ouvir uma dica sábia de Johannes fastcgi_pass unix:/var/run/php5-fpm.sock;nginx.conf
M.
Tendo o mesmo problema com o php 7.2. O que você quer dizer com adicionar o arquivo no contexto httpd? Este seria um arquivo conf adicional na pasta / etc / nginx / sites-available / ou o quê?
27968 PeterKA em 01/02
47

Esta resposta é apenas para aqueles que recebem um erro como este:

connect () falhou (111: Conexão recusada) ao conectar-se ao cliente upstream .... fastcgi: // [:: 1]: 9000

Reescreva sua configuração do nginx para usar ip, não dns. Por exemplo, em 127.0.0.1vez de localhost, ou remova o alias do ipv6 de / etc / hosts.

Quake1TF
fonte
3
Você apontou minha na direção certa! Embora eu estivesse usando listen 80bem (e há muitos exemplos por aí), não achei que isso implicasse os endereços IPv4 ( 127.0.0.1) e IPv6 ( [::1]).
glarrain
5
Eu tive que mudar de listen 80 default_serverpara listen 0.0.0.0:80.
givanse
Você pode apontar por que isso deve ajudar?
Kaiser #
11
Como a maioria das distribuições linux tem o ipv6 ativado em rede, mas nem todos os pacotes configurados para uso no ipv6. Na minha opinião, quando o nginx inicia a conexão com o upstream, o resolvedor do sistema retorna o endereço IPv6 primeiro. O php-fpm (centos 7.x) não tinha essas configurações da caixa. E a maioria dos guias explica tudo na versão ipv4, esquecendo os futuros do ipv6 que devem ser desativados ou usados.
Quake1TF
Whooah, então [:: 1] é o endereço IPv6 do host local! :) Obrigado!
Lechup
4

Também tenho erros como este. O problema era meu back-end abstrato referenciando dois servidores. php-fpmestava listando apenas para soquete ...

# 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
fonte
1

Teve o mesmo problema com solicitações em proxy para um servidor Nó atendendo na porta 5000. As solicitações resultariam, 200 OKmas algumas vezes 502 Bad Gatewayaleatoriamente. NGINX mostrou o erro:

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

Minha solução:

  1. Configure o servidor HTTP do nó para atender estritamente ao ipv4 incluindo localhost como host:server.listen(5000, 'localhost');
  2. Removidas as diretivas de escuta do ipv6 ( listen [::]:80;ou listen [::]:443 ssl default_server;).
  3. Bloco de local alterado proxy_pass para usar IPs: proxy_pass http://127.0.0.1:5000(não proxy_pass http://localhost:5000).

Espero que isso ajude alguém.

Niko Solihin
fonte
0

No meu caso, o erro foi um local ruim para o arquivo error_log do serviço php5.6-fpm e, portanto, o serviço php-fpm estava falhando ao iniciar e o nginx não conseguiu se conectar a ele . Você pode encontrá-lo /etc/php/5.6/fpm/php.ini(você pode substituir o 5.6 pela versão em execução).

George Donev
fonte
-1

Ainda hoje encontrei esse problema e, para mim, foi um problema de pouca memória durante um período de alta carga. Portanto, o aumento do tipo de instância corrigiu o problema.

Romesh D. Niriella
fonte
-4

Eu tive o mesmo problema e adicionei a instrução listen

listen 127.0.0.1;

trabalhou para mim.

Curiosamente, eu tenho outros blocos de servidores que estão sendo executados muito felizes sem isso!

Rob Ganly
fonte
3
Isso já foi respondido e aceito, há três anos.
Sven