2013-04-22 6 views
30

मेरे पास पाइथन Django ऐप के लिए Nginx + uWSGI है।Nginx टाइमआउट जब uWSGI अनुरोध को संसाधित करने में लंबा समय लगता है

मैं में निम्नलिखित है मेरी nginx.conf:

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 1800; 
    uwsgi_send_timeout 300; 
    client_header_timeout 300; 
    proxy_read_timeout 300; 
    index index.html index.htm; 
} 

लेकिन uWSGI पर लंबी चलने वाली अनुरोधों के लिए जो मैं नीचे के रूप में Nginx त्रुटि लॉग में एक टाइमआउट त्रुटि मिल को पूरा करने के बारे में 1 मिनट लगता है:

2013/04/22 12:35:56 [त्रुटि] 270 9 # 0: * अपस्ट्रीम से प्रतिक्रिया शीर्षलेख पढ़ने के दौरान 1 अपस्ट्रीम का समय समाप्त हो गया (110: कनेक्शन का समय समाप्त हो गया): xx.xx.xx.xx, सर्वर: अनुरोध: "प्राप्त करें/इकाई/डेटासेंडर/HTTP/1.1", अपस्ट्रीम: "uwsgi: //127.0.0.1: 9 001", होस्ट: "xxx.xx.xx.x"

मैंने पहले से ही हेडर टाइम सेट कर दिया है और यूडब्ल्यूएसजीआई 5 मिनट तक टाइमआउट भेज/पढ़ता है, क्या कोई मुझे बता सकता है कि मैं इसे दूर करने के लिए क्या कर सकता हूं?

उत्तर

49

विन्यास कि समस्या का हल है:

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 300; 
    index index.html index.htm; 
} 

कारण सवाल में ऊपर विन्यास हमारे लिए काम नहीं किया है क्योंकि हमारे मशीन कई रास्तों में दुर्भाग्य से nginx.conf फ़ाइल था। हम गलत रास्ते पर conf के साथ काम कर रहे थे।

सही ढंग से पता लगाने के लिए पथ अपने nginx रन से विन्यास उठा:

nginx -V # V is caps 

यह एक --conf-path=[] जिससे आप निश्चित होगा, जहां से इसे से विन्यास उठा होगा।

मुझे हाल ही में nginx -V सही जानकारी देने के लिए नहीं मिला है। यदि उपरोक्त इसे उपयोगी पाते हैं तो मैं उपरोक्त को छोड़ दूंगा।

+1

उस नंबर क्या का प्रतिनिधित्व कर रहा है? सेकंड? और क्या यह एक समस्या होगी यदि हमने 2000 की तरह बड़ी संख्या में सेट किया था? – senaps

0

"uwsgi_read_timeout" उत्तर के अतिरिक्त, आपको यह भी जांचना चाहिए कि स्वामित्व आपके nginx uwsgi कैश निर्देशिका के लिए सही है। स्वामित्व चल nginx प्रक्रिया के रूप में एक ही उपयोगकर्ता के लिए सेट किया जाना चाहिए ... मेरे मामले में मैं इस

grep '^user' /etc/nginx/nginx.conf 
ls -lah /var/cache/nginx/uwsgi_temp 
for f in $(find /var/cache/nginx/uwsgi_temp); do ls -lah $f; done 

करना था ये वही उपयोगकर्ता के स्वामित्व वाली फ़ाइलों हैं? यदि नहीं, तो आप nginx को बंद कर सकते हैं और सभी कैश फ़ाइलों को हटा सकते हैं, सुनिश्चित करें कि उचित स्वामी/var/cache/nginx/uwsgi_temp चालू है और पुनरारंभ करें। शायद आप एक रिकर्सिव बोउन भी कर सकते हैं, मैंने इस दृष्टिकोण का परीक्षण नहीं किया।

# store the user 
THEUSER=$(grep '^user' /etc/nginx/nginx.conf | sed 's/.* //; s/;.*//') 

निकालें कैश और पुनः आरंभ दृष्टिकोण

/etc/init.d/nginx stop 
rm -rf /var/cache/nginx/uwsgi_temp/* 
chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp 
/etc/init.d/nginx start 

रिकर्सिव chown दृष्टिकोण

chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/ 
# not sure if you have to restart nginx here... 
संबंधित मुद्दे