
我的 Nginx 伺服器出現 504 逾時:
504 Gateway Time-out
。該網站允許用戶下載自訂資料檔案。該網站在大多數情況下運作良好,用戶可以毫無問題地下載一些檔案。問題是資料檔案僅在請求時產生。因此,當請求複雜資料時,Python 後端需要一分多鐘的時間來產生檔案並開始下載。因為一分鐘內沒有回應,Nginx 回來了504 Gateway Time-out
.文件本身是 CSV 文件,不是很大,因此在後端生成文件後下載速度很快,但我需要一種方法讓 Nginx 等待更長時間。
我正在尋找一種方法將 Nginx 逾時從 1 分鐘增加到大約 10 分鐘。
到目前為止我已經嘗試過:
更改檔案以在大括號nginx.conf
之間包含以下行http {}
uwsgi_connect_timeout 75s;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
我還嘗試按照建議添加timeout.conf
文件/etc/nginx/conf.d/
https://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
進行每次更改後,我都重新啟動了伺服器,但 1 分鐘後仍然出現逾時。透過curl -o
在伺服器上運行來繞過任何服務提供者問題,對此進行了進一步測試。輸出如下。
$curl -o out-put-file.csv "./localhost/my/url"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183 100 183 0 0 3 0 0:01:01 0:01:00 0:00:01 48
這個錯誤被寫入 error.log
2018/03/26 09:55:15 [error] 10105#10105: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 142.1.2.3, server: localhost, request: "GET /my/url", upstream: "uwsgi://unix:/tmp/my-applacation.sock", host: "142.1.2.3"
當我在沒有 Nginx 的情況下運行我的應用程式並運行相同的請求時curl -o
,請求需要相當長的時間(根據請求的資料最多需要 8 分鐘),但它確實正確完成,沒有錯誤或超時。
運行$ /usr/sbin/nginx -V 2>&1 | grep conf
顯示設定檔位於--conf-path=/etc/nginx/nginx.conf
Nginx 版本:nginx/1.12.2 和 nginx/1.4.6 (Ubuntu)
作業系統版本:Ubuntu 16.04.1 和 Ubuntu 14.04.5 LTS
編輯:
我已經測試了更改設定檔中的worker_processes數量,只是為了確保對設定檔中其他內容的更改確實被採納,並且更改該數量確實會改變工作人員的數量,因此檔案作業系統是正確的檔案並更改為被Nginx 接收。只是不改變超時(或者可能是完整的http部分?)。我還測試過將超時設定為 30 秒,但它們仍然在 1 分鐘時超時。另外,嘗試將這些設定放入sites-enabled/my_site
但我仍然得到相同的結果。
編輯2:
據我所知,我正在根據 Nginx 文件正確設定這些值。 uwsgi_connect_timeout
答案1
我解決了!
結果發現問題與uwsgi有關,而我已經設定了
uwsgi_connect_timeout 75s;
我實際上需要設定的是
uwsgi_read_timeout 600s;