V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cc959798
V2EX  ›  PHP

关于 nginx 502 和 504 的一点疑问

  •  
  •   cc959798 · 2018-11-11 11:04:19 +08:00 · 2855 次点击
    这是一个创建于 2204 天前的主题,其中的信息可能已经有所发展或是发生改变。

    502 很好理解,是后端 cgi 程序超时然后断开了 cgi 连接,导致的,一般可能是数据库慢查询在之类的

    504 是 cgi 还没有超时,nginx 过了自己的超时时间导致的 比如 nginx 是配置的 60s cgi 程序配置的 300s

    但是现在的情况是同一个请求既有可能是 502,又可能是 504 如果是 504 的话,nginx 的超时时间是短于 cgi 的,这个样子就不会出现 502 了,感觉这是有些矛盾的

    会不会是这个情况,nginx 的超时时间和 cgi 程序的超时时间是一样的,比如都是 60s,nginx 和 cgi 的计时不会太精确,就有可能是 502 又有可能 504

    3 条回复    2018-11-11 12:37:05 +08:00
    ppyybb
        1
    ppyybb  
       2018-11-11 11:25:02 +08:00 via iPhone   ❤️ 1
    有没有可能是某些后端负载太大或者状态有问题,导致链接不上,这时候是 502。

    某些后端没有问题,但是这个服务太慢,nginx 自己超时,这时候是 504。

    负载均衡导致随机出现一种。
    cc959798
        2
    cc959798  
    OP
       2018-11-11 11:38:31 +08:00
    @ppyybb 我们查到的如果 cgi 进程不够用,导致请求没有进程处理会导致 504 而不是 502,这种仔细想想也是正常的,比如 fmp 中的 master 和 worker,nginx 打过来了,没有 worker 处理,nginx 一直等着,worker 没有处理的,这个时候不会计算 cgi 的处理时间,压根就没处理,所以 nginx 等着超时了,但是一般发生这种情况前端网站一般都比较卡了,一台机器都这个样子了
    当然这个地方比较模糊,一般 cgi 主动断开才是 502
    hefish
        3
    hefish  
       2018-11-11 12:37:05 +08:00
    cgi 端是 php 吗?是的话是不是可以看看 slowlog
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1249 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:07 · PVG 02:07 · LAX 10:07 · JFK 13:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.