Configuration 如何使用Nginx上的FastCGI防止网关超时

Configuration 如何使用Nginx上的FastCGI防止网关超时,configuration,nginx,fastcgi,Configuration,Nginx,Fastcgi,我正在运行Django、FastCGI和Nginx。我正在创建一个api,其中有人可以通过XML发送一些数据,我将处理这些数据,然后为发送过来的每个节点返回一些状态代码 问题是,如果处理XML的时间太长,Nginx将抛出504网关超时——我认为超过60秒 因此,我想设置Nginx,这样,如果任何与位置/api匹配的请求都不会超时120秒。什么样的环境才能做到这一点 到目前为止,我得到的是: # Handles all api calls location ^~ /api/ {

我正在运行Django、FastCGI和Nginx。我正在创建一个api,其中有人可以通过XML发送一些数据,我将处理这些数据,然后为发送过来的每个节点返回一些状态代码

问题是,如果处理XML的时间太长,Nginx将抛出504网关超时——我认为超过60秒

因此,我想设置Nginx,这样,如果任何与位置/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\u header\u timeout
client\u body\u timeout
send\u timeout

编辑:考虑到nginx wiki上的内容,负责设置一般响应超时(这有点误导)。对于FastCGI,有一个
FastCGI\u read\u timeout
,它会影响系统


HTH.

对于那些将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;
}
如果你用独角兽

查看服务器上的
top
。Unicorn现在可能正在使用100%的CPU。 这个问题有几个原因

  • 您应该检查您的HTTP请求,其中一些请求可能非常困难

  • 检查独角兽的版本。可能是你最近更新了它,有些东西坏了


http
nginx部分(/etc/nginx/nginx.conf)中添加或修改:

keepalive_timeout 300s
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;
request_terminate_timeout = 300
server
nginx部分(/etc/nginx/sites available/your config file.com)添加以下行:

keepalive_timeout 300s
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;
request_terminate_timeout = 300
在案例127.0.0.1:9000(/etc/php/7.X/fpm/pool.d/www.conf)中的
php
文件中修改:

keepalive_timeout 300s
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;
request_terminate_timeout = 300

希望能对您有所帮助。

在服务器代理集中就是这样

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;
       }
}

对于任何使用uwsgi并出现此错误的用户,uwsgi_read_timeout 600;修复了我的问题。我的问题是(作为一个服务器管理员业余爱好者)我应该去哪里更改这个?httpd.conf文件?如果有帮助的话,我的文件位于/etc/nginx/at Media Temple的DV系统中。Abdo提供了一种很好的调试方法。如果仍然有问题,可能需要增加nginx.conf(client_max_body_size**M;)中的最大客户端消息大小,增加超时imho不是一个合适的解决方案。您可以将超时值设置为“2m”而不是“120”。数据未被流化似乎很糟糕。。。ie让服务器在60秒或更长时间内开始响应似乎是不可接受的。我认为人们对此投了反对票,因为这是关于Django的,但是你的回答修复了我在Rails+Unicorn上的网关超时问题:)如果我将时间更改为10000秒,会发生什么“不好”的情况吗?不会发生什么不好的情况,但你的服务会等待更长的时间。您可以根据需要更改其值。