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