152 votes

La connexion a échoué (111: Connexion refusée) lors de la connexion à l'amont.

Je rencontre des erreurs 502 Gateway lors de l'accès à un fichier PHP dans un répertoire (http://example.com/dev/index.php). Les journaux indiquent simplement ceci :

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"

Je n'ai jamais rencontré cela auparavant. Quelle est la solution pour ce type d'erreur 502 Gateway ?

Voici le nginx.conf :

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

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Paramètres de base
    ##

    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;

    ##
    # Paramètres de journalisation
    ##

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

    ##
    # Paramètres de compression Gzip
    ##

    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;

    ##
    # Configurations d'hôtes virtuels
    ##

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

1 votes

'Connexion refusée' signifie que le backend n'écoute pas sur le port 9000 ou que sa file d'attente est pleine. Ce problème est lié au backend lui-même. Êtes-vous capable de faire un telnet sur localhost 9000? Vous devriez aussi vérifier vos logs backend et php.

0 votes

Mise à jour de mon post. Je n'ai pas pu me connecter en telnet à localhost 9000.

0 votes

La même erreur à laquelle je faisais face, Cela entrez une description de lien ici peut vous aider

87voto

Quake1TF Points 791

Cette réponse est uniquement pour ceux qui obtiennent une erreur comme celle-ci :

connect() failed (111: Connection refused) while connecting to upstream, client .... fastcgi://[::1]:9000

Réécrivez votre configuration nginx pour utiliser une adresse IP, pas de DNS. Par exemple, 127.0.0.1 au lieu de localhost, ou supprimez l'alias IPv6 de /etc/hosts.

11 votes

Tu m'as orienté dans la bonne direction! Je pensais que simplement utiliser écouter 80 était suffisant (et il y a beaucoup d'exemples avec ça), mais je n'ai pas pensé que cela impliquait à la fois les adresses IPv4 (127.0.0.1) et IPv6 ([::1]).

10 votes

J'ai dû passer de listen 80 default_server à écouter 0.0.0.0:80.

1 votes

Pouvez-vous pointer pourquoi cela devrait aider?

71voto

quanta Points 49664

Il semble que vous n'ayez pas encore démarré et configuré le backend pour Nginx. Démarrez php-fpm et ajoutez ce qui suit à nginx.conf, dans le contexte de http:

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

6 votes

Merci mec, ça a marché, je n'avais pas php-fpm installé. Santé.

16 votes

Vous êtes un génie pur. Je n'arrive pas à croire les 1.0000000 millions de guides que j'ai lus à ce sujet, PERSONNE ne mentionne qu'il faut ajouter un "listen 127.0.0.1" pour activer le backend. Vous m'avez sauvé d'un cauchemar!!!

1 votes

Vous devriez envisager d'utiliser le socket Unix. Visualisez-le avec netstat -l et regardez pour /var/run/php5-fpm.sock (la configuration pour cela se trouve normalement dans /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:

11voto

Niko Solihin Points 71

J'avais le même problème avec les requêtes proxy vers un serveur Node écoutant sur le port 5000. Les requêtes aboutissaient avec un code de statut 200 OK mais parfois 502 Bad Gateway de façon aléatoire. NGINX affichait l'erreur :

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

Ma solution :

  1. Configurer le serveur HTTP Node pour écouter strictement pour l'ipv4 en incluant localhost en tant qu'hôte : server.listen(5000, 'localhost');
  2. Supprimer toutes les directives d'écoute d'ipv6 (listen [::]:80; ou listen [::]:443 ssl default_server;).
  3. Modifier le bloc de localisation proxy_pass pour utiliser des adresses IP : proxy_pass http://127.0.0.1:5000 (pas proxy_pass http://localhost:5000).

J'espère que cela aidera quelqu'un.

0 votes

Savez-vous pourquoi cela vous a aidé?

10voto

KumZ Points 181

Obtenez également des erreurs comme celle-ci. Le problème était que mon backend abstrait faisait référence à deux serveurs. php-fpm n'écoutait que sur le socket...

# Amont à la/aux connection(s) backend abstrait(s) pour php
upstream php {
        server unix:/var/run/php5-fpm.sock;
        #server 127.0.0.1:9000;
} 

serveur {
    [...]

    location ~ \.php$ {
            # NOTE: Vous devriez avoir "cgi.fix_pathinfo = 0;" dans php.ini

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

1voto

George Donev Points 101

Dans mon cas, l'erreur était un mauvais emplacement pour le fichier error_log pour le service php5.6-fpm et donc le service php-fpm ne parvenait pas à démarrer et nginx n'était pas en mesure de s'y connecter. Vous pouvez le trouver dans /etc/php/5.6/fpm/php.ini (vous pouvez remplacer 5.6 par la version que vous utilisez).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X