我正在运行Django,FastCGI和Nginx。我正在创建一种各种各样的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;
}
编辑:我所拥有的不起作用:)
答案 0 :(得分:242)
代理超时适用于代理,而不适用于FastCGI ......
影响FastCGI超时的指令是client_header_timeout
,client_body_timeout
和send_timeout
。
编辑:考虑到在nginx wiki上发现了什么,send_timeout directive负责设置响应的一般超时(这有点误导)。对于FastCGI,有fastcgi_read_timeout
影响fastcgi process response timeout。
HTH。
答案 1 :(得分:23)
对于那些使用nginx和unicorn和rails的人来说,很可能超时是在你的unicorn.rb
文件中
在unicorn.rb中放了一个大的超时
timeout 500
如果您仍然遇到问题,请尝试在nginx的上游使用fail_timeout = 0,看看这是否可以解决您的问题。这是出于调试目的,在生产环境中可能很危险。
upstream foo_server {
server 127.0.0.1:3000 fail_timeout=0;
}
答案 2 :(得分:1)
如果你使用独角兽。
查看服务器上的top
。 Unicorn现在可能正在使用100%的CPU。
这个问题有几个原因。
您应该检查您的HTTP请求,其中一些可能非常难。
检查独角兽的版本。可能是你最近更新了它,但有些事情被打破了。
答案 3 :(得分:0)
在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;
在案例127.0.0.1:9000(/etc/php/7.X/fpm/pool.d/www.conf)的php
文件中修改:
request_terminate_timeout = 300
我希望能帮助你。
答案 4 :(得分:0)
在这样的服务器代理中设置
location / {
proxy_pass http://ip:80;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
}
在服务器php中设置
server {
client_body_timeout 120;
location = /index.php {
#include fastcgi.conf; //example
#fastcgi_pass unix:/run/php/php7.3-fpm.sock;//example veriosn
fastcgi_read_timeout 120s;
}
}