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

she*_*ats 199 configuration fastcgi nginx

我正在运行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;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:我有什么不工作:)

zgo*_*oda 243

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

影响FastCGI超时的指令是client_header_timeout,client_body_timeoutsend_timeout.

编辑:考虑到在nginx wiki上发现了什么,send_timeout指令负责设置响应的一般超时(这有点误导).对于FastCGI fastcgi_read_timeout,会影响fastcgi进程响应超时.

HTH.

  • 答案是fastcgi_read_timeout - 谢谢! (47认同)
  • 对于任何使用uwsgi且出现此错误的人,uwsgi_read_timeout 600; 解决了我的问题. (8认同)
  • 我的问题是(作为服务器管理员业余爱好者)我要去哪里更改?httpd.conf文件? (2认同)
  • 如果它有帮助,我的是在Media Temple的DV系统的/ etc/nginx /. (2认同)
  • 增加超时恕我直言不是一个正确的解决方案。 (2认同)

Abd*_*bdo 23

对于那些使用nginx与unicorn和rails的人来说,很可能超时在你的unicorn.rb文件中

在unicorn.rb中放了一个大的超时

timeout 500
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到问题,请尝试在nginx的上游使用fail_timeout = 0,看看这是否可以解决您的问题.这是出于调试目的,在生产环境中可能很危险.

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为人们对它进行了低估,因为这是关于Django的,但是你的答案修复了Rails + Unicorn的网关超时问题:) (3认同)

Jos*_*tes 9

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

keepalive_timeout 300s
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

php案例 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) 的文件中修改:

request_terminate_timeout = 300
Run Code Online (Sandbox Code Playgroud)

我希望对你有帮助。