504 गेटवे टाइमआउट के कारण Nginx रिवर्स प्रॉक्सी




reverse-proxy proxypass (3)

यदि आप सभी साइटों पर समय सीमा बढ़ाने या जोड़ना चाहते हैं तो आप nginx.conf फ़ाइल में नीचे पंक्तियां जोड़ सकते हैं।

/etc/nginx/nginx.conf या /etc/nginx/nginx.conf फ़ाइल के http अनुभाग में नीचे पंक्तियां जोड़ें।

fastcgi_read_timeout 600;
proxy_read_timeout 600;

यदि उपर्युक्त पंक्तियां फ़ाइल में मौजूद नहीं हैं तो उन्हें जोड़ें, अन्यथा fastcgi_read_timeout और proxy_read_timeout को यह सुनिश्चित करने के लिए proxy_read_timeout कि nginx और php-fpm ने टाइमआउट नहीं किया है।

केवल एक साइट के लिए समय सीमा बढ़ाने के लिए आप vim /etc/nginx/sites-available/example.com में संपादित कर सकते हैं

location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
    fastcgi_read_timeout 300; 
}

और nginx.conf में इन पंक्तियों को जोड़ने के बाद, nginx को पुनरारंभ करना न भूलें।

service php7-fpm reload 
service nginx reload

या, यदि आप वैलेट का उपयोग कर रहे हैं तो बस valet restart टाइप करें।

मैं Nginx को एक रिवर्स प्रॉक्सी के रूप में उपयोग कर रहा हूं जो अनुरोध करता है तो पोर्ट 8001 पर चल रहे अपस्ट्रीम सर्वर से वास्तविक वेब एप्लिकेशन प्राप्त करने के लिए proxy_pass करता है।

अगर मैं mywebsite.com पर जाता हूं या एक wget करता हूं, तो मुझे 60 सेकंड के बाद 504 गेटवे टाइमआउट मिलता है ... हालांकि, अगर मैं mywebsite.com:8001 लोड करता हूं, तो एप्लिकेशन अपेक्षा के अनुसार लोड हो जाता है!

तो कुछ अपस्ट्रीम सर्वर के साथ संवाद करने के लिए nginx को अस्वीकार कर रहा है ...

मेरी होस्टिंग कंपनी ने मशीन को रीसेट करने के बाद यह सब शुरू किया, इससे पहले कि कोई भी समस्या नहीं थी।

मेरे vhosts सर्वर ब्लॉक यहाँ है:

server {

        listen   80;
        server_name mywebsite.com;

        root /home/user/public_html/mywebsite.com/public;

        access_log /home/user/public_html/mywebsite.com/log/access.log upstreamlog;
        error_log /home/user/public_html/mywebsite.com/log/error.log;

        location / {

                    proxy_pass http://xxx.xxx.xxx.xxx:8001;
                    proxy_redirect off;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                    }

        } 

और मेरे Nginx त्रुटि लॉग से आउटपुट:

2014/06/27 13:10:58 [त्रुटि] 31406 # 0: * 1 अपस्ट्रीम टाइम आउट (110: कनेक्शन का समय समाप्त हो गया) अपस्ट्रीम से कनेक्ट करते समय, क्लाइंट: xxx.xx.xxx.xxx, सर्वर: mywebsite.com, अनुरोध: "प्राप्त करें / HTTP / 1.1", अपस्ट्रीम: " http://xxx.xxx.xxx.xxx:8001/ ", होस्ट: "mywebsite.com"


संभवतः अपस्ट्रीम में टाइमआउट अवधि बढ़ाने के लिए कुछ और पंक्ति जोड़ सकते हैं। नीचे दिए गए उदाहरण 300 सेकंड तक टाइमआउट सेट करते हैं:

proxy_connect_timeout       300;
proxy_send_timeout          300;
proxy_read_timeout          300;
send_timeout                300;

समय-समय पर बढ़ने से आपकी समस्या का समाधान नहीं होगा, जैसा कि आप कहते हैं, वास्तविक लक्ष्य वेब सर्वर ठीक से प्रतिक्रिया दे रहा है।

मेरे पास यह वही मुद्दा था और मैंने पाया कि कनेक्शन पर रख-रखाव का उपयोग न करने के साथ इसे करना था। मैं वास्तव में जवाब नहीं दे सकता कि यह क्यों है, लेकिन कनेक्शन हेडर को साफ़ करने में मैंने इस मुद्दे को हल किया और अनुरोध ठीक से ठीक हो गया था:

server {
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://localhost:5000;
    }
}

इस पोस्ट पर एक नज़र डालें जो इसे अधिक विस्तार से बताती है: अनुरोध के बाद nginx क्लोज अपस्ट्रीम कनेक्शन रखें- जीवित हेडर स्पष्टीकरण http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive







http-status-code-504