terhubung () gagal (111: Koneksi ditolak) saat terhubung ke hulu

85

Saya mengalami 502 Gatewaykesalahan saat mengakses file PHP di direktori ( http://example.com/dev/index.php). Log hanya mengatakan ini:

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"

Saya belum pernah mengalami ini sebelumnya. Apa solusi untuk jenis 502 Gatewaykesalahan ini?

Ini adalah 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
sumber
1
'Sambungan ditolak' berarti backend tidak mendengarkan port 9000 atau antriannya terisi. Masalah ini terkait dengan backend itsef. Apakah Anda dapat telnet localhost 9000? Anda juga harus memeriksa backend dan log php Anda.
Andrew
Memperbarui pos saya. Saya tidak bisa telnet ke localhost 9000.
MacMac
Kesalahan yang sama saya hadapi dengan Anda, Deskripsi tautan ini di sini dapat membantu Anda
Tripathi29

Jawaban:

43

Sepertinya Anda belum memulai dan mengonfigurasi backend untuk Nginx. Mulai php-fpmdan tambahkan berikut ini ke nginx.conf, dalam httpkonteks:

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;
    }
}
kuanta
sumber
3
Terima kasih sobat, itu berhasil, saya belum php-fpmmenginstal. Tepuk tangan.
MacMac
6
Kamu jenius murni. Saya tidak percaya 1,0000000 juta panduan yang saya baca tentang ini, TIDAK ADA menyebutkan bahwa Anda harus meletakkan "listen 127.0.0.1" untuk mengaktifkan backend. Anda menyelamatkan saya dari mimpi buruk !!!
Anda harus mempertimbangkan untuk menggunakan soket unix. Lihat dengan netstat -ldan lihat untuk /var/run/php5-fpm.sock(konfigurasi untuk ini biasanya di /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket>
JohannesM
2
Anda akan memiliki listen = /var/run/php5-fpm.sockdi dalam /etc/php5/fpm/pool.d/www.conf. tetapi Anda akan menginginkan listen = 9000dan ;listen = /var/run/php5-fpm.sock. jika kamu seperti saya. (Atau kalau tidak, Anda dapat mendengarkan petunjuk bijaksana oleh JohannesM. yang saya bayangkan akan meninggalkan Anda dengan sesuatu seperti fastcgi_pass unix:/var/run/php5-fpm.sock;di suatu tempat di Anda nginx.conf)
n611x007
Memiliki masalah yang sama dengan php 7.2. Apa yang Anda maksud dengan menambahkan file dalam konteks httpd? Apakah ini file conf tambahan di / etc / nginx / sites-available / folder atau apa?
PeterKA
47

Jawaban ini hanya untuk mereka yang mendapatkan kesalahan seperti ini:

terhubung () gagal (111: Sambungan ditolak) saat tersambung ke hulu, klien .... fastcgi: // [:: 1]: 9000

Tulis ulang konfigurasi nginx Anda untuk menggunakan ip, bukan dns. Misalnya, 127.0.0.1alih-alih localhost, atau menghapus alias ipv6 dari / etc / hosts.

Quake1TF
sumber
3
Anda mengarahkan saya ke arah yang benar! Saya menggunakan hanya listen 80baik-baik saja (dan ada banyak contoh di luar sana dengan itu) tapi saya tidak berpikir yang menyiratkan alamat IPv4 ( 127.0.0.1) dan IPv6 ( [::1]).
glarrain
5
Saya harus berubah dari listen 80 default_servermenjadi listen 0.0.0.0:80.
givanse
Bisakah Anda menunjukkan mengapa ini bisa membantu?
kaiser
1
Karena sebagian besar distribusi linux mengaktifkan ipv6 dalam jaringan, tetapi tidak semua paket dikonfigurasi untuk penggunaan ipv6. Menurut pendapat saya, ketika nginx memulai koneksi ke hulu, resolver sistem mengembalikan alamat IPv6 terlebih dahulu. Php-fpm (centos 7.x) tidak memiliki pengaturan seperti itu dari kotak. Dan sebagian besar panduan menjelaskan semua dalam versi ipv4, lupa tentang masa depan ipv6 yang harus dinonaktifkan atau digunakan.
Quake1TF
Whooah, jadi [:: 1] adalah alamat IPv6 localhost! :) terima kasih!
lechup
4

Mendapat kesalahan seperti ini juga. Masalahnya adalah backend abstrak saya merujuk dua server. php-fpmhanya daftar ke soket ...

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

Punya masalah yang sama dengan permintaan proksi ke server Node mendengarkan pada port 5000. Permintaan akan menghasilkan 200 OKtetapi kadang-kadang 502 Bad Gatewaysecara acak. NGINX menunjukkan kesalahan:

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

Solusi saya:

  1. Setel simpul server HTTP untuk mendengarkan secara ketat ipv4 dengan memasukkan localhost sebagai tuan rumah:server.listen(5000, 'localhost');
  2. Menghapus arahan mendengarkan ipv6 ( listen [::]:80;atau listen [::]:443 ssl default_server;).
  3. Mengubah blok lokasi proxy_pass untuk menggunakan IP: proxy_pass http://127.0.0.1:5000(tidak proxy_pass http://localhost:5000).

Semoga ini bisa membantu seseorang.

Niko Solihin
sumber
0

Dalam kasus saya kesalahan adalah lokasi yang buruk untuk file error_log untuk layanan php5.6-fpm dan dengan demikian layanan php-fpm gagal untuk memulai dan nginx tidak dapat terhubung ke sana . Anda dapat menemukannya di /etc/php/5.6/fpm/php.ini(Anda dapat mengganti 5.6 dengan versi yang Anda jalankan).

George Donev
sumber
-1

Baru hari ini saya mengalami masalah ini dan bagi saya itu adalah masalah memori rendah selama periode beban tinggi. Jadi naik level tipe instance memperbaiki masalah.

Romesh D. Niriella
sumber
-4

Saya memiliki masalah yang sama dan menambahkan pernyataan mendengarkan

listen 127.0.0.1;

bekerja untukku.

Yang cukup menarik, saya memiliki blok server lain yang berjalan cukup bahagia tanpa ini!

Rob Ganly
sumber
3
Ini sudah dijawab dan diterima, tiga tahun lalu.
Sven