कनेक्ट () विफल (111: कनेक्शन ने इनकार कर दिया) अपस्ट्रीम से कनेक्ट करते समय


85

502 Gatewayनिर्देशिका में PHP फ़ाइल तक पहुँचते समय मैं त्रुटियाँ अनुभव कर रहा हूँ ( http://example.com/dev/index.php)। लॉग केवल यह कहता है:

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"

मैंने इससे पहले कभी अनुभव नहीं किया। इस प्रकार की 502 Gatewayत्रुटि का समाधान क्या है ?

यह है 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
'कनेक्शन मना कर दिया' का अर्थ है कि बैकएंड पोर्ट 9000 को नहीं सुनता है या इसकी कतार भर जाती है। यह समस्या बैकएंड इटसेफ से संबंधित है। क्या आप 9000 9000 लोकल टेलनेट करने में सक्षम हैं? आपको अपने बैकएंड और php लॉग की भी जांच करनी चाहिए।
एंड्रयू

मेरी पोस्ट अपडेट की गई। मैं लोकलहोस्ट को 9000 में टेलनेट नहीं कर सकता।
मैकमाक

वही त्रुटि जो मैं आपका सामना कर रहा था, यह यहाँ लिंक विवरण आपको मदद कर सकता है
त्रिपाठी

जवाबों:


43

ऐसा लगता है कि आपने Nginx के बैकएंड को शुरू और कॉन्फ़िगर नहीं किया है। संदर्भ में php-fpmनिम्नलिखित को प्रारंभ और जोड़ें :nginx.confhttp

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
धन्यवाद आदमी, यह काम किया, मैंने php-fpmस्थापित नहीं किया है। चीयर्स।
मैकमेक

6
तुम शुद्ध प्रतिभाशाली हो। मैं विश्वास नहीं कर सकता कि मैं इस बारे में पढ़े 1.0000000 मिलियन गाइड, NOBODY का उल्लेख है कि बैकएंड को सक्षम करने के लिए आपको "127.0.0.1 सुनें" अवश्य रखना चाहिए। तुमने मुझे एक बुरे सपने से बचाया !!!

आपको यूनिक्स सॉकेट का उपयोग करने पर विचार करना चाहिए। साथ यह देखें netstat -lऔर ही देख /var/run/php5-fpm.sock(इस के लिए config /etc/php5/fpm/pool.d/www.conf में सामान्य रूप से है। fastcgi_pass unix:<socket>
JohannesM

2
आपके listen = /var/run/php5-fpm.sockअंदर होगा /etc/php5/fpm/pool.d/www.conf। लेकिन आप चाहते हैं listen = 9000और ;listen = /var/run/php5-fpm.sock। अगर तुम मेरे जैसे होते। (या वैकल्पिक रूप से आप fastcgi_pass unix:/var/run/php5-fpm.sock;nginx.conf
जोहान्सम

Php 7.2 के साथ एक ही समस्या है। Httpd संदर्भ में फ़ाइल को जोड़ने से आपका क्या मतलब है? क्या यह / etc / nginx / साइट्स-उपलब्ध / फ़ोल्डर या क्या अतिरिक्त फ़ाइल होगी?
14

47

यह उत्तर केवल उन लोगों के लिए है जिन्हें इस तरह की त्रुटि मिलती है:

कनेक्ट () विफल हुआ (111: कनेक्शन ने इनकार कर दिया) अपस्ट्रीम, क्लाइंट से कनेक्ट करते समय .... fastcgi: // [:: 1]: 9000

IP का उपयोग करने के लिए अपने nginx कॉन्फ़िगरेशन को फिर से लिखें, डीएनएस नहीं। उदाहरण के लिए, 127.0.0.1इसके बजाय localhost, या / आदि / मेजबानों से ipv6 उपनाम को हटा दें।


3
आपने सही दिशा में मेरी ओर इशारा किया! हालांकि मैं इसका उपयोग listen 80ठीक कर रहा था (और उस के साथ बहुत सारे उदाहरण हैं) लेकिन मैंने नहीं सोचा था कि दोनों आईपीवी 4 ( 127.0.0.1) और आईपीवी 6 ( [::1]) पते निहित हैं ।
glarrain

5
मैं से बदलना पड़ा listen 80 default_serverकरने के लिए listen 0.0.0.0:80
givanse

क्या आप बता सकते हैं कि यह क्यों मदद करनी चाहिए?
कैसर

1
अधिकांश लाइनेक्स के वितरण में IPv6 नेटवर्किंग में सक्षम है, लेकिन सभी पैकेट ipv6 उपयोग के लिए कॉन्फ़िगर नहीं किए गए हैं। मेरी राय में, जब नगीनक्स अपस्ट्रीम से कनेक्शन शुरू करता है, तो सिस्टम रिज़ॉल्वर पहले ipv6 एड्रेस देता है। Php-fpm (सेंटो 7.x) बॉक्स से ऐसी कोई सेटिंग नहीं थी। और अधिकांश मार्गदर्शक सभी IPv4 संस्करण में समझाते हैं, ipv6 वायदा के बारे में भूल जाते हैं जिसे अक्षम या उपयोग किया जाना चाहिए।
Quake1TF

Whooah, इसलिए [:: 1] लोकलहोस्ट IPv6 एड्रेस है! :) धन्यवाद!
lechup

4

इस तरह की त्रुटियां भी हुईं। समस्या मेरे सार बैकएंड दो सर्वरों को संदर्भित करने की थी। php-fpmकेवल सॉकेट में सूचीबद्ध था ...

# 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 पर सुन रहे नोड सर्वर के लिए अनुमानित अनुरोधों के साथ भी यही समस्या थी। अनुरोधों का परिणाम 200 OKकुछ समय के लिए होगा 502 Bad Gateway। NGINX ने दिखाया त्रुटि:

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

मेरा समाधान:

  1. होस्ट के रूप में लोकलहोस्ट को शामिल करके IPv4 के लिए सख्ती से सुनने के लिए नोड HTTP सर्वर सेट करें :server.listen(5000, 'localhost');
  2. किसी भी ipv6 निर्देश ( listen [::]:80;या listen [::]:443 ssl default_server;) को हटा दें ।
  3. IP का उपयोग करने के लिए परिवर्तित स्थान ब्लॉक प्रॉक्सी_पास: proxy_pass http://127.0.0.1:5000(नहीं proxy_pass http://localhost:5000)।

आशा है कि यह किसी की मदद करता है।


0

मेरे मामले में त्रुटि php5.6-fpm सेवा के लिए error_log फ़ाइल के लिए एक बुरा स्थान थी और इस प्रकार php-fpm सेवा शुरू होने में विफल रही थी और nginx इससे कनेक्ट करने में सक्षम नहीं था । आप इसे पा सकते हैं /etc/php/5.6/fpm/php.ini(आप जिस संस्करण को चला रहे हैं उसके साथ 5.6 को बदल सकते हैं)।


-1

बस आज मैं इस समस्या में भाग गया और मेरे लिए यह एक उच्च लोड अवधि के दौरान कम मेमोरी का मुद्दा था। तो उदाहरण के स्तर को समतल करना समस्या को निर्धारित करता है।


-4

मुझे भी यही समस्या थी और सुनने के स्टेटमेंट को जोड़ना था

listen 127.0.0.1;

मेरे लिए काम किया।

दिलचस्प रूप से पर्याप्त मेरे पास अन्य सर्वर ब्लॉक हैं जो इसके बिना काफी खुशी से चल रहे हैं!


3
इसका उत्तर तीन साल पहले ही दिया जा चुका है।
स्वेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.