nginx499错误

作者: goodx2study | 来源:发表于2018-06-11 23:04 被阅读0次

    1、nginx报499,php慢日志,数量基本一致,每分钟1000+

    2、相同版本程序,不同的是机房和后端服务。

    首先看php慢日志,定位到具体的慢日志都是curl后端数据服务器慢,查看curl耗时日志,发现有一台数据服务器curl返回结果特别慢。

    但是为什么会报499错误?之前遇到的curl慢导致的结果都是504timeout。

    网上搜索http code 499,大概获取到的信息是

    1、499是nginx自定义的httpcode

    2、一般都是由客户端主动断开连接导致的

    一番搜索下来并没有什么实质性结果。

    转移方向从配置文件入手。

    慢日志和499日志量基本一致,推断主要可能是超时引起的问题。

    1、查看nginx的fastcgi配置的超时选项

            fastcgi_connect_timeout 5s;

            fastcgi_send_timeout 5s;

            fastcgi_read_timeout 5s;

     2、查看php-fpm配置

        pm = static

        pm.max_children = 500

    以前遇到过504,是因为fastcgi_read_timeout 超时。看到fpm的配置,子进程是静态的,进而推测499 是由于每个请求耗时过长,导致fpm的子进程被用完了,fastcgi_connect_timeout 超时。

    为证实这个推测,测试环境模拟fastcgi_connect_timeout。

    将php-fpm的配置改成

    pm = static

    pm.max_children = 2

    重启php-fpm

    将php脚本改为

    <?php

        sleep(10);

        echo 11;

    curl 指定php脚本。观察curl结果输出和nginx日志。

    发现3个curl命令在10秒或者10几秒后都能正常输出。推测失败。。。

    多次尝试失败后,在curl等待时ctrl+c,日志中出现了499,结合之前搜索到的499产生原因,基本确认了499是由于响应太慢导致客户端直接断开连接了。

    tcpdump抓包结果

    相关文章

      网友评论

        本文标题:nginx499错误

        本文链接:https://www.haomeiwen.com/subject/aitvsftx.html