業務場景:第三發團隊直接將數據通過http請求將數據通過接口傳給我們,然後我們再進行入庫。項目涉及到大量圖片信息,不僅要去第三方fastDFS服務器上下載圖片還有對圖片進行ocr識別導致圖片數據量很大時,會報錯504服務相應超時。項目中使用了nginx,所以這裏解決超時問題要修改nginx配置文件。
1.問題分析
nginx訪問出現504 Gateway Time-out,一般是由於程序執行時間過長導致響應超時,例如程序需要執行90秒,而nginx最大響應默認時間爲60秒,這樣就會出現超時。
通常有以下幾種情況導致
1.程序在處理大量數據,導致等待超時。
2.程序中調用外部請求,而外部請求響應超時。
3.連接數據庫失敗而沒有停止,死循環重新連。
出現這種情況,要麼優化程序,縮短執行時間。另一方面,可以調大nginx超時限制的參數,使程序可以正常執行。項目實際場景中主要涉及到圖片的下載以後對圖片進行ocr識別數據量比較大,優化代碼空間可能不是很大。所以選擇將時間調大處理。
解決辦法:這裏對nginx.conf文件進行修改。如下
#默認的fastcgi進程響應的緩衝區是8K,設置成128k
fastcgi_buffers 8 128k;
#指定nginx與後端fastcgi server連接超時時間,而fastcgi連接超時時間,默認60秒
fastcgi_connect_timeout 1800s;
#指定nginx向後端傳送請求超時時間(指已完成兩次握手後向fastcgi傳送請求超時時間),默認值60秒
fastcgi_send_timeout 1800s;
#fastcgi 進程向 nginx 進程發送輸出過程的超時時間,默認值60秒
fastcgi_read_timeout 1800s;