http 状态码499

这篇具有很好参考价值的文章主要介绍了http 状态码499。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是499状态

 nginx源码中对499状态码的定义如下:


/*
 * HTTP does not define the code for the case when a client closed
 * the connection while we are processing its request so we introduce
 * own code to log such situation when a client has closed the connection
 * before we even try to send the HTTP header to it
 */

#define NGX_HTTP_CLIENT_CLOSED_REQUEST 499

总结:当客户端主动把连接断开时,HTTP 不为这种情形定义代码。同时我们处理它的请求时,我们引入了当一个客户端在我们尝试向其发送 HTTP 头之前关闭连接时,使用自己的代码(也就是 499 状态码)来记录这种情况。

  • 499 状态码不是 HTTP 的标准代码
  • 499 状态码是 Nginx 自己定义,用来 记录(你没看错,就是记录一下) 服务端向客户端发送 HTTP 请求头之前,客户端已经关闭连接的一种情况
  • 最常见的场景就是 timeout 设置不合理,Nginx 把请求转发上游服务器,上游服务器慢吞吞的处理,客户端等不及了主动断开链接,Nginx 就负责记录了 499

什么情况Nginx记录499错误日志

这里我们使用 curl 模拟请求一下,更多 curl 的骚操作请访问 curl 的用法指南。

for i in $(seq 1 10); do curl -m 2 "http://api.example.test"; done

http 状态码499

解释: curl -m 2 "http://api.example.test"  2秒没有响应则断开

tail -f /var/log/nginx/apiexample.access.log

172.19.0.1 - - [15/Nov/2019:06:32:19 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:22 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:24 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:26 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:28 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:30 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:32 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:34 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:36 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"
172.19.0.1 - - [15/Nov/2019:06:32:38 +0000] "GET / HTTP/1.1" 499 0 "-" "curl/7.67.0"

如上所见,使用 Timeout 很容易模拟出 499 这种情形。

记录 499 的情形:

  • 如上所示,数据传输的最大允许时间超时的话,Curl 断开了请求,而 Web 服务器如 Nginx 还在处理的话,则 Nginx 会记录 499
  • 如果 Nginx 作为反向代理时,Nginx 将请求分发至对应的处理服务器时,有两对超时参数的设置:proxy_send_timeout 和 proxy_read_timeoutfastcgi_send_timeout 和 fastcgi_read_timeout。两对参数默认的超时时间都是 60s。在 Nginx 出现 499 的情况下,可以结合请求断开前的耗时和这两对设定的时间进行对比,看一下是不是在 proxy_pass 或者 fastcgi_pass 处理时,设置的超时时间短了
  • 如果 PHP 操作超时。打开 php.ini 查看 max_execution_time 和 max_input_time 两个参数。两者分别是 PHP 程序执行的最长时间和表单提交的最长时间
  • 如果两次提交 POST 过快就会出现 499 的情况,Nginx 认为是不安全的连接,主动拒绝了客户端的连接
  • 相关负载均衡配置等

如何有效防止Nginx记录499错误

综上所述,我们可以得出一个结论,HTTP 请求在指定的时间内没能拿到响应而关闭了连接,就会发生 Nginx 记录 499 错误的情况。这个涉及到两个重要的问题:时间问题 和 性能问题(性能问题太过宽泛就不提及了),所以解决这个问题也就从这两方面入手。

当然还有配置 proxy_ignore_client_abort 参数为 on 来解决的(让代理服务端不要主动关闭客户端的连接)。但是这样也有一定的风险,会拖垮服务器。发生这个错误,如果服务器 CPU 和 Memory 不算太高,一般是数据库和程序的问题,数据库处理较慢或者程序线程较低。结合情况调整,比如读写分离或者程序线程数调高。

(如果后端是fastcgi,比如php-fpm,配置fastcgi_ignore_client_abort on; //如果后端是fastcgi,比如php-fpm )

文档中对 proxy_ignore_client_abort 参数的说明:

Determines whether the connection with a proxied server should be closed when a client closes the connection without waiting for a response.

翻译:当一个客户端关闭连接而不等待响应时,确定与代理服务器的连接是否应该关闭。文章来源地址https://www.toymoban.com/news/detail-404996.html

到了这里,关于http 状态码499的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个很少遇到的网络状态码 -- 499

    一、问题背景 前段时间运维拦截到了一些 499 网络状态码报警,我对该问题进行了简单排查,本文对该状态码做简单的一个介绍。 二、问题探寻 2.1 问题探寻-过程 [499 - CLIENT CLOSED REQUEST] A non-standard status code introduced by nginx for the case when a client closes the connection while nginx is proc

    2024年02月08日
    浏览(17)
  • nginx 499错误处理及nginx的配置参数

    近期响应集团降本增效,节省ci,stg机器,我们项目开始容器化,在改造过程中,链路的访问发生了变化,导致出现了499,解决方如下 访问链路: 域名— ELB (内网访问) — openrestry (stg环境,支持自定义lua脚本) — ELB(提供服务固定ip) — (容器集群)POd nignx报499的原因是服务端

    2024年02月10日
    浏览(26)
  • Nginx代理服务器、HTTP调度、TCP/UDP调度、Nginx优化、HTTP错误代码、状态页面、压力测试

    Top 案例1:Nginx反向代理 案例2:Nginx的TCP/UDP调度器 案例3:Nginx常见问题处理 1.1 问题 使用Nginx实现Web反向代理功能,实现如下功能: 后端Web服务器两台,可以使用httpd实现 Nginx采用轮询的方式调用后端Web服务器 两台Web服务器的权重要求设置为不同的值 最大失败次数为2,失败

    2024年01月21日
    浏览(33)
  • 记一次nginx配置不当引发的499与failover 机制失效

    nginx 499在服务端推送流量高峰期长期以来都是存在的,间或还能达到告警阈值触发一小波告警,但主观上一直认为499是客户端主动断开,可能和推送高峰期的用户打开推送后很快杀死app有关,没有进一步探究问题根源。 然而近期在非高峰期也存在499超过告警阈值的偶发情况,

    2024年02月01日
    浏览(36)
  • HTTP状态码是什么?

    HTTP 状态码(HTTP Status Code)是一个表示服务器响应状态的 3 位整数代码。比如当服务器收到客户端的某个请求后,服务器会对客户端做出响应,响应中会使用一个数字形式的代码来表示当前响应的状态,这个代码就是 HTTP 状态码。 状态码使用第一个数字表示响应的类别,一共

    2024年02月03日
    浏览(20)
  • 什么是http协议?有什么特点?有哪些状态码?

    HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,用于在客户端和服务器之间进行通信。HTTP 协议定义了 Web 客户端和服务器之间互相通信的格式和规则,是互联网信息交换的基础 HTTP是基于请求-响应模型的协议,客户端发送HTTP请求到服务器,服务器处理请求

    2024年02月16日
    浏览(36)
  • HTTP常见的状态码有哪些?适用场景有什么?

    1、什么是HTTP状态码 HTTP状态码 (英语:HTTP Status Code),用以 表示网页服务器 http 响应状态 的3位数字代码。 HTTP状态码的作用是服务器告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行状态。 2、常见的状态码和适用场景 状态码第一位数字决定了不

    2023年04月24日
    浏览(31)
  • (超全面详细)http常见的状态码(含具体开发场景),400,401,403状态码分别代表什么及区别?

    (超全面详细)http常见的状态码(含具体开发场景),400,401,403状态码分别代表什么及区别? HTTP请求状态码在我们开发工作中非常重要,尤其是定位问题及排查bug等,或者安全提升方面都有一定的帮助. 因此有必要对状态码有一个全面详细的总结,如下所示: 一、常见的状态码 200(成

    2024年03月22日
    浏览(30)
  • 【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求

    1、安装 2、配置组件自动导入 使用 npm 安装好 uni-ui 之后,需要配置 easycom 规则,让 npm 安装的组件支持 easycom 打开项目根目录下的 pages.json 并添加 easycom 节点: 3、安装插件,实现uni-ui组件的类型提示 安装完成后,在 tsconfig.json 中增加配置项 4、测试使用 随便复制一个组件在

    2024年02月08日
    浏览(44)
  • nginx解决不必要的 Http 响应头漏洞(自定义server信息及隐藏版本号)

    1.自定义server信息 修改nginx解压目录下的/src/core/nginx.h文件     修改nginx解压目录下的/src/http/ngx_http_header_filter_module.c文件 修改 nginx解压目录下的/src/http/ngx_http_special_response.c文件  全部修改完成后,执行./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_sub_module --w

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包