bağlantıya bağlanırken connect () başarısız oldu (111: Bağlantı reddedildi)


85

502 GatewayBir dizindeki bir PHP dosyasına erişirken hatalar yaşıyorum ( http://example.com/dev/index.php). Günlükler basitçe şunu söylüyor:

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"

Bunu daha önce hiç yaşamadım. Bu tür bir 502 Gatewayhatanın çözümü nedir ?

Bu 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
'Bağlantı reddedildi', arka ucun 9000 numaralı bağlantı noktasını dinlemediği veya kuyruğunun dolduğu anlamına gelir. Bu problem arka uçla ilgilidir. 9000 localhost telnetini kurabilecek misin? Ayrıca arka uç ve php günlüklerinizi de kontrol etmelisiniz.
Andrew

Gönderim güncellendi. Localhost 9000'e telnet yapamadım.
MacMac

Sana karşı karşıya kaldığım aynı hatayı, Buraya bağlantı açıklaması girin size yardımcı olabilir
Tripathi29

Yanıtlar:


43

Nginx için arka ucu başlatmamış ve yapılandırmamış gibisiniz. Başlangıç php-fpmve aşağıdakileri ekleyin nginx.confde, httpbağlam:

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
Sağol dostum, işe yaradı, php-fpmkurmadım. Şerefe.
MacMac

6
Sen saf bir dahisin. Bu konuda okuduğum 1.0000000 milyon rehbere inanamıyorum, NOBODY arka uçları etkinleştirmek için bir "127.0.0.1 dinle" ifadesi koymanız gerektiğini belirtiyor. Beni bir kabustan kurtardın !!!

unix soketini kullanmayı düşünmelisiniz. Şununla görüntüleyin netstat -lve bakın /var/run/php5-fpm.sock(bunun için yapılandırma normalde /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket>
JohannesM

2
listen = /var/run/php5-fpm.sockiçeride olacaksın /etc/php5/fpm/pool.d/www.conf. ama isteyeceksin listen = 9000ve ;listen = /var/run/php5-fpm.sock. eğer benim gibiysen. (ya da alternatif olarak JohannesM'in akıllıca ipucunu dinleyebilirsin, ki seni senin içinde bir fastcgi_pass unix:/var/run/php5-fpm.sock;yerde bulacağını hayal ediyorum nginx.conf)
n611x007

Aynı konuya sahip olmak php 7.2. Dosyayı httpd bağlamına ekleyerek ne demek istiyorsunuz? Bu / etc / nginx / sites-available / folder dizininde ek bir dosya olabilir mi?
PeterKA,

47

Bu cevap sadece böyle bir hata yapanlar içindir:

connect () başarısız oldu (111: Bağlantı reddedildi) giriş yukarı, istemciye bağlanırken .... fastcgi: // [:: 1]: 9000

Dns yerine ip kullanmak için nginx config komutunu yeniden yazın. Örneğin , ipv6 takma adını 127.0.0.1yerine localhost/ etc / hosts dosyasından kaldırın veya kaldırın.


3
Doğru yönde işaret ettin! Ben sadece kullanmak listen 80iyiydi (ve bununla ilgili pek çok örnek var), ancak hem IPv4 ( 127.0.0.1) hem de IPv6 ( [::1]) adreslerini ima ettiğini düşünmedim .
glarrain

5
İle arasında geçiş listen 80 default_serveryapmak zorunda kaldım listen 0.0.0.0:80.
givanse

Bunun neden yardımcı olması gerektiğine işaret edebilir misiniz ?
kaiser

1
Çünkü çoğu linux dağıtımında ağ oluşturmada etkin ipv6 vardır, ancak tüm ipv6 kullanımı için yapılandırılmış paketler değildir. Bana göre, nginx yukarı akış bağlantısı başlattığında, sistem çözümleyicisi önce ipv6 adresini döndürür. Php-fpm (centos 7.x) kutusunda böyle bir ayar yoktu. Ve çoğu kılavuz ipv4 sürümünde hepsini açıklar, devre dışı bırakılması veya kullanılması gereken ipv6 vadeli işlemlerini unutur.
Quake1TF

Whooah, bu yüzden [:: 1] localhost IPv6 adresi! :) Teşekkürler!
lechup

4

Bunun gibi hatalar da var. Sorun, iki sunucuyu referans alan soyut arka uçtu. php-fpmsadece sokete listeleme yapıyordum ...

# 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

5000 İstekler ile sonuçlanacaktır bağlantı noktasında dinleme bir Düğüm sunucuya proxy istekleri ile aynı sorunu vardı 200 OKama bazen 502 Bad Gatewayrastgele. NGINX hatayı gösterdi:

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

Çözümüm:

  1. Düğüm HTTP sunucusunu , host olarak localhost ekleyerek ipv4'ü kesinlikle dinleyecek şekilde ayarlayın :server.listen(5000, 'localhost');
  2. Herhangi bir ipv6 dinleme yönergesi kaldırıldı ( listen [::]:80;veya listen [::]:443 ssl default_server;).
  3. IP kullanmak için değiştirilen konum bloğu proxy_pass: proxy_pass http://127.0.0.1:5000(değil proxy_pass http://localhost:5000).

Umarım bu birine yardımcı olur.


0

Benim durumumda hata php5.6-fpm servisi için error_log dosyası için hatalı bir konumdu ve bu nedenle php-fpm servisi başlatılamadı ve nginx buna bağlanamadı . İçinde bulabilirsiniz /etc/php/5.6/fpm/php.ini(çalıştırdığınız sürümle 5.6'yı değiştirebilirsiniz).


-1

Sadece bugün bu sorunla karşılaştım ve benim için yoğun bir yükleme döneminde düşük hafıza sorunu oldu. Bu nedenle, örnek tipini seviyelendirmek sorunu çözdü.


-4

Ben de aynı problemi yaşadım ve listeni ekledim

listen 127.0.0.1;

benim için çalıştı.

İlginçtir ki bu olmadan oldukça mutlu çalışan diğer sunucu blokları var!


3
Bu, üç yıl önce zaten yanıtlanmış ve kabul edilmiştir.
Sven,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.