首頁  >  文章  >  後端開發  >  記一次 nginx 504 Gateway Time-out 504 time out nginx 504 gateway 504 gateway

記一次 nginx 504 Gateway Time-out 504 time out nginx 504 gateway 504 gateway

WBOY
WBOY原創
2016-07-29 08:55:191715瀏覽

今天程式在執行一項excel匯出任務的時候出現了nginx超時的提示

nginx 504 Gateway Time-out

排查過程:

查看該任務發現內容是一個資料量20000條資訊每條資訊有50個欄位在執行導出為excel的時候出現了該問題

執行時間大概在10分鐘左右就出現超時

分析:

Nginx 504 Gateway Time-out的含義是所請求的網關沒有請求到,簡單來說就是沒有請求到可以執行的PHP-CGI
通常以下幾種情況會導致這個問題:
1.程式在處理大量的數據,或者有死循環之類的問題
2.創建資料庫之類的連接因為某些原因連接不上,然後沒有超時失敗的機制,導致一直在創建連接
3.程式中有一些http請求,這些請求執行時間過長,導致超時

分別查看nginx及php的相關配置查看timeout具體參數

找到nginx設定檔

<span>#修改Nginx配置:
fastcgi_connect_timeout 1200s;#原设置为300s
fastcgi_send_timeout 1200s;<span>#原设置为300s</span>fastcgi_read_timeout 1200s;<span>#原设置为300s</span>fastcgi_buffer_size 64k;
fastcgi_buffers </span><span>4</span><span> 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;</span>

這裡最主要的設定是前三條,即

<span>fastcgi_connect_timeout #同 FastCGI 服务器的连接超时时间,默认值60秒,它不能超过75秒;<br>fastcgi_send_timeout #Nginx 进程向 FastCGI 进程发送 request ,整个过程的超时时间,默认值60秒;<br>fastcgi_read_timeout #FastCGI  进程向  Nginx  进程发送 response ,整个过程的超时时间,默认值60秒;<br></span>

php設定檔

<span>php.ini<br></span><span>max_execution_time = 300s;PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。<br>php-fpm<br>request_terminate_timeout = 0; #设置单个请求的超时中止时间.设置为0 即一直执行下去直到程序结束 不会超时
</span>
reee

但是頁面空白,並沒有文件匯出。應該還是php在執行過程中逾時

沒辦法查看php程式碼並沒有發現有執行時間的設定即:set_time_limit

百度一下php函數執行時間查到以下內容:

set_time_limit

一下php函數執行時間查到以下內容:

set_time_limit

本函數來配置該頁最久執行時間。預設值是 30 秒,在 php.ini 中的 max_execution_time 變數配置,若配置為 0 則不限定最久時間。

當執行到該函數時,才開始計算。例如,若預設為 30 秒,而在執行到該函數前已執行了 25 秒,而用本函數改為 20 秒,則該頁面最長執行時間為 45 秒。

最後在php函數裡 增加了這樣一行:

set_time_limit(0);

再次執行,結果可以了。

以上就介紹了記一次 nginx 504 Gateway Time-out,包含了504 gateway time-out方面的內容,希望對PHP教學有興趣的朋友有幫助。

🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn