मैं Nginx पर FastCGI के साथ गेटवे टाइमआउट कैसे रोकूं


203

मैं Django, FastCGI, और Nginx चला रहा हूं। मैं एक प्रकार की एक एपीआई बना रहा हूं कि जहां कोई XML के माध्यम से कुछ डेटा भेज सकता है जिसे मैं संसाधित करूंगा और फिर प्रत्येक नोड के लिए कुछ स्थिति कोड लौटा दूंगा।

समस्या यह है कि अगर मैं XML को संसाधित करने में बहुत लंबा समय लेता हूं, तो Nginx 504 गेटवे टाइम-आउट फेंक देगा - मुझे लगता है कि यह 60 सेकंड से अधिक लंबा है।

इसलिए मैं नेग्नेक्स को स्थापित करना चाहूंगा ताकि यदि लोकेशन / एपीआई से मेल खाने वाला कोई भी अनुरोध 120 सेकंड के लिए समय न निकाल पाए। कौन सी सेटिंग उसे पूरा करेगी।

मेरे पास अब तक क्या है:

    # Handles all api calls
    location ^~ /api/ {
        proxy_read_timeout 120;
        proxy_connect_timeout 120;
        fastcgi_pass 127.0.0.1:8080;
    }

संपादित करें: मेरे पास क्या काम नहीं है :)


7
आप "120" के बजाय "2 मी" पर टाइमआउट मान सेट कर सकते हैं।
सेन्क एलती

1
यह बुरा लगता है कि डेटा स्ट्रीम नहीं किया जा रहा है ... यानी एक सर्वर के लिए 60 सेकंड में वापस प्रतिक्रिया शुरू करने के लिए या अधिक अस्वीकार्य लगता है।
एडम गेंट

जवाबों:


245

प्रॉक्सी टाइमआउट ठीक है, परदे के पीछे के लिए, FastCGI के लिए नहीं ...

FastCGI टाइमआउट को प्रभावित करने वाले निर्देश हैं client_header_timeout, client_body_timeoutऔर send_timeout

संपादित करें : नगणक्स विकी पर क्या पाया जाता है, इस पर विचार करते हुए, send_timeout निर्देश प्रतिक्रिया के सामान्य समयबाह्य (जो कि थोड़ा भ्रामक था) को स्थापित करने के लिए जिम्मेदार है। FastCGI के लिए fastcgi_read_timeoutजो Fastcgi प्रक्रिया प्रतिक्रिया टाइमआउट को प्रभावित कर रहा है ।

HTH।


8
Uwsgi का उपयोग करने वाले और इस त्रुटि वाले किसी के लिए, uwsgi_read_timeout 600; मेरी समस्या ठीक कर दी।
होमर

2
मेरा सवाल यहाँ होगा (एक सर्वर व्यवस्थापक शौकिया के रूप में) मैं इसे बदलने के लिए कहां जाऊं? httpd.conf फ़ाइल?
jeffkee

2
अगर यह मदद करता है, मेरा / मीडिया मंदिर की DV प्रणाली में / etc / nginx / था।
jeffkee

अब्दो डीबग करने का एक अच्छा तरीका देता है। यदि आपको अभी भी परेशानी है, तो आपको nginx.conf (client_max_body_size ** M?) में अधिकतम ग्राहक संदेश आकार बढ़ाने की आवश्यकता हो सकती है
सैम Grondahl

2
टाइमआउट इमहो को बढ़ाना एक उचित समाधान नहीं है।
जैजकैट

24

गेंडा और रेल के साथ नगीनेक्स का उपयोग करने वालों के लिए, सबसे अधिक संभावना है कि आपकी unicorn.rbफ़ाइल में टाइमआउट है

Unicorn.rb में एक बड़ा मध्यांतर डालें

timeout 500

यदि आप अभी भी समस्याओं का सामना कर रहे हैं, तो nginx में अपने अपस्ट्रीम में fail_timeout = 0 होने का प्रयास करें और देखें कि क्या यह आपकी समस्या को हल करता है। यह डिबगिंग के उद्देश्यों के लिए है और उत्पादन के माहौल में खतरनाक हो सकता है।

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}

3
मुझे लगता है कि लोगों ने इसे कम कर दिया क्योंकि यह Django के बारे में है, हालांकि आपके जवाब ने मेरे गेटवे टाइमआउट मुद्दे को रेल + यूनिकॉर्न के साथ तय किया :)
ZiggyThejob

4

में httpnginx धारा (/etc/nginx/nginx.conf) जोड़ने या संशोधित:

keepalive_timeout 300s

में servernginx धारा (/etc/nginx/sites-available/your-config-file.com) इन पंक्तियों जोड़ें:

client_max_body_size 50M;
fastcgi_buffers 8 1600k;
fastcgi_buffer_size 3200k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;

में phpमामला 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) में फ़ाइल को संशोधित:

request_terminate_timeout = 300

मुझे आशा है कि आप मदद करेंगे।


अगर मैं 10000 सेकंड में समय बदल दूं तो क्या कुछ "बुरा" होगा?
utdev

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

1

यदि आप गेंडा का उपयोग करते हैं।

देखो topअपने सर्वर पर। अभी यूनिकॉर्न 100% CPU का उपयोग कर रहा है। इस समस्या के कई कारण हैं।

  • आपको अपने HTTP अनुरोधों की जांच करनी चाहिए, उनमें से कुछ बहुत कठिन हो सकते हैं।

  • गेंडा के संस्करण की जाँच करें। हो सकता है कि आपने इसे हाल ही में अपडेट किया हो, और कुछ टूट गया हो।


0

सर्वर प्रॉक्सी में उस तरह सेट करें

location / {

                proxy_pass http://ip:80;                

                proxy_connect_timeout   90;
                proxy_send_timeout      90;
                proxy_read_timeout      90;

            }

सर्वर php में उस तरह सेट करें

server {
        client_body_timeout 120;
        location = /index.php {

                #include fastcgi.conf; //example
                #fastcgi_pass unix:/run/php/php7.3-fpm.sock;//example veriosn

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