如何在Nginx上使用FastCGI防止网关超时
我正在运行Django,FastCGI和Nginx。 我正在创build一个类似的api,在那里有人可以通过XML发送一些数据,我将处理,然后返回每个节点发送的状态码。
问题是,如果我花了很长时间来处理XML,Nginx会抛出一个504网关超时 – 我想超过60秒。
所以我想设置Nginx,以便如果任何匹配location / api的请求不会超时120秒。 什么设置将完成。
我到目前为止是:
# Handles all api calls location ^~ /api/ { proxy_read_timeout 120; proxy_connect_timeout 120; fastcgi_pass 127.0.0.1:8080; }
编辑:我有什么不工作:)
代理超时很好,代理,而不是FastCGI …
影响FastCGI超时的指令是client_body_timeout
, client_body_timeout
和send_timeout
。
编辑 :考虑到在nginx维基上发现了什么, send_timeout指令负责设置响应的一般超时(这是有点误导)。 对于FastCGI,存在影响fastcgi进程响应超时的fastcgi_read_timeout
。
HTH。
对于那些使用独angular兽和rails的nginx,很可能超时在你的unicorn.rb
文件中
在unicorn.rb里放了一个很大的超时时间
timeout 500
如果你仍然面临问题,请尝试在nginx的上游fail_timeout = 0,看看这是否解决了你的问题。 这是为了debugging目的,可能在生产环境中是危险的。
upstream foo_server { server 127.0.0.1:3000 fail_timeout=0; }
如果你使用独angular兽。
看看你的服务器top
。 独angular兽可能正在使用100%的CPU。 这个问题有几个原因。
-
你应该检查你的HTTP请求,他们的一些可以很难。
-
检查独angular兽的版本。 可能是你最近更新了,有些东西坏了。
在http
nginx部分(/etc/nginx/nginx.conf)添加或修改:
keepalive_timeout 300s
在server
nginx部分(/etc/nginx/sites-available/your-config-file.com)添加这些行:
client_max_body_size 50M; fastcgi_buffers 8 1600k; fastcgi_buffer_size 3200k; fastcgi_connect_timeout 300s; fastcgi_send_timeout 300s; fastcgi_read_timeout 300s;
在php
文件127.0.0.1:9000的情况下(/etc/php/7.X/fpm/pool.d/www.conf)修改:
request_terminate_timeout = 300
我希望能帮助你。