nginx: अपस्ट्रीम से कनेक्ट करते समय कोई लाइव अपस्ट्रीम नहीं


15

साइट के पृष्ठों और कुछ बार होम पेज के बीच स्विच करते समय 502 खराब गेटवे त्रुटि प्रदर्शित हुई, लेकिन होम पेज पर पहले अनुरोध के लिए नहीं, यह केवल तब होता है जब कोई अन्य पेज इसे रीडायरेक्ट करता है। और यह कुछ जावास्क्रिप्ट फ़ाइलों के लिए होता है

दो अपस्ट्रीम php1 php2 पर लोड बैलेंसिंग कॉन्फ़िगर दोनों अपाचे सर्वर हैं।

जब मैंने एरर लॉग चेक किया तो मैं उसे पसंद करता हूं:

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"

और यह लोड संतुलन सर्वर कॉन्फ़िगरेशन है

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass  http://$server_name/$uri;
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
      }

    }

मैंने घंटों खोज की और कुछ भी उपयोगी नहीं पाया कि मेरी धाराएँ ऊपर हैं और उनके साथ कोई समस्या नहीं है।


क्या आपके अपस्ट्रीम सर्वर (php01, php02) काम कर रहे हैं? आप ngnix मशीन से उन्हें टेलनेट कर सकते हैं?
न्यूट्रिनस

वे जुड़े हुए हैं।
मोहम्मद जोलानी

क्या आपने चेक किया है कि अपस्ट्रीम सर्वर में ट्रैफ़िक को संभालने के लिए पर्याप्त प्रक्रियाएँ हैं? यदि वे किसी कारण से अनुरोधों से इनकार करते हैं तो आपको अपस्ट्रीम सर्वर लॉग की जांच करनी चाहिए।
तेरो किल्केन

मैंने किया और किसी भी अपस्ट्रीम एरर लॉग के साथ कोई समस्या नहीं है, और खराब गेटवे अनुरोधों के लिए कोई एक्सेस लॉग नहीं है।
मोहम्मद जोलानी

क्या आपको इस समस्या का हल मिला?
झिलमिलाहट

जवाबों:


4

यह नग्नेक्स के साथ कोई समस्या नहीं है, यह आपके PHP बैकएंड के साथ समय में जवाब नहीं देने की समस्या है। इसकी पुष्टि के लिए आप Nginx में लॉगिंग जोड़ सकते हैं

संदर्भ के दूसरे बिंदु के रूप में, आप topसर्वर पर कर सकते हैं और मैन्युअल रूप से जांच सकते हैं कि क्या PHP सीपीयू को समय की अवधि के लिए धीमा कर रहा है, धीमी प्रतिक्रियाओं का एक और संकेतक।

यदि PHP से बहुत धीमी प्रतिक्रियाएं आपके साथ ठीक हैं, तो आप देने से पहले Nginx को अधिक समय तक इंतजार करने के लिए कह सकते हैं:

 # Wait 5 minutes before giving up on the backend!
 proxy_read_timeout 5m; 

उपरोक्त लिंक की गई जानकारी के साथ लॉग की जांच करके, आपको यह पता लगाने में सक्षम होना चाहिए कि PHP प्रक्रिया के लिए कौन से अनुरोध धीमा हैं।

समस्या को कम करने के लिए, इन अनुरोधों को सीधे PHP बैकएंड पर भेजें।

जो कुछ हो रहा है, उसके आधार पर, आप कुछ धीमी गति से अनुरोधों से बचते हुए, Nginx में कुछ अनुरोधों को कैशिंग करने में सक्षम हो सकते हैं।


0

अगर यह काफी समान है पता नहीं है, लेकिन मेरे लिए क्या काम किया था सर्वर नाम के अंत में max_fails = 0 को जोड़ने के लिए

अपस्ट्रीम sm_url {सर्वर LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }


-3

अपस्ट्रीम को "up_example.com" में बदलें और बदलें

proxy_pass  http://$server_name/$uri;

होना

proxy_pass  http://up_$server_name$uri;

अपरंपरागत रहते हुए, मैं के उपयोग के साथ कोई तकनीकी समस्या नहीं देखता हूं $server_name। यदि यह समस्या थी, तो मुझे लगता है कि उसे कभी-कभी रिपोर्ट की गई / नहीं बल्कि सभी समय की समस्याएं होंगी।
मार्क स्टोसबर्ग 17
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.