如何在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_timeoutclient_body_timeoutsend_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 

我希望能帮助你。