212

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

问题是,如果我处理 XML 的时间太长,Nginx 会抛出 504 Gateway Time-out ——我认为超过 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;
    }

编辑:我没有工作:)

4

5 回答 5

252

代理超时很好,对于代理,而不是 FastCGI...

client_header_timeout影响 FastCGI 超时的指令是client_body_timeoutsend_timeout

编辑:考虑到 nginx wiki 上的内容,send_timeout 指令负责设置响应的一般超时(这有点误导)。对于 FastCGI,有fastcgi_read_timeout哪些影响FastCGI 进程响应超时

于 2009-02-18T19:34:13.790 回答
24

对于那些将 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;
}
于 2012-12-11T15:48:33.057 回答
6

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

keepalive_timeout 300s

servernginx 部分 (/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

我希望能帮助你。

于 2017-01-30T20:14:03.433 回答
1

如果你使用独角兽。

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

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

  • 检查独角兽的版本。可能是您最近更新了它,并且出现了问题。

于 2015-12-09T00:55:39.490 回答
1

在这样的服务器代理集中

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;
       }
}
于 2020-03-17T14:25:02.280 回答