如何在Nginx上使用FastCGI阻止网关超时

时间:2009-02-18 17:01:26

标签: configuration nginx fastcgi

我正在运行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;
    }

编辑:我所拥有的不起作用:)

5 个答案:

答案 0 :(得分:242)

代理超时适用于代理,而不适用于FastCGI ......

影响FastCGI超时的指令是client_header_timeoutclient_body_timeoutsend_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;
       }
}