2013-04-22 174 views
30

我有用於Python Django應用程序的Nginx + uWSGI。當uWSGI花費很長時間處理請求時,Nginx超時

我在下面我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長時間運行的請求,這需要約1分鐘,完成我得到了如下的Nginx錯誤日誌超時錯誤:

2013/04/22 12:35:56 [error] 2709#0:* 1上游超時(110:連接超時),從上游讀取響應標頭,client:xx.xx.xx.xx,server:,請求:「GET/entity/datasenders/HTTP/1.1」,上游:「uwsgi://127.0.0.1:9001」,主機:「xxx.xx.xx.x」

我已經設置了標題超時和uWSGI發送/讀取超時到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 2017-09-11 06:12:04

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並重新啓動。也許你也可以做一個遞歸chown,我沒有測試這種方法。

# 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...