Nginx

無法更改 NGINX 超時

  • March 26, 2018

我的 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;

我還嘗試按照https ://asdqwe.n​​et/blog/solutions-504-gateway-timeout-nginx/的建議添加一個timeout.conf文件:/etc/nginx/conf.d/

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

ngx_http_proxy_module

我解決了!!

這個問題原來與uwsgi有關,而我已經設置了

uwsgi_connect_timeout 75s;

我實際上需要設置的是

uwsgi_read_timeout 600s;

引用自:https://serverfault.com/questions/897424