`
biocy
  • 浏览: 35051 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nginx 日志中的400和408

阅读更多

我们项目中一直在用nginx做反向代理,最近发现一些443端口日志中出现大量的400 和 408日志,其中408的响应时间在60s左右,所以整理一下关于这方面的问题:

 

出现400的原因:
1.如果客户端提前关闭了连接或者读取数据发生了其他错误,则给客户端返回一个400错误
2.ngx_http_process_request_line函数中,如果ngx_http_parse_request_line函数返回了错误,则直接给客户端返回400错误,逐行解析错误
3.ngx_http_process_unique_header_line功能类似,不同点在于该函数会检查这个请求头是否是重复的,如果是的话,则给该请求返回400错误。
4.NGX_HTTP_PARSE_INVALID_HEADER,表示请求头解析过程中遇到错误,一般为客户端发送了不符合协议规范的头部,此时nginx返回400错误
5.ngx_http_process_request_header()函数,这个函数主要做了两个方面的事情,一是调用ngx_http_find_virtual_server()函数查找虚拟服务器配置;二是对一些请求头做一些协议的检查。比如对那些使用http1.1协议但是却没有发送Host头的请求,nginx给这些请求返回400错误
6.首字节探测:若成功查看1个字节数据,通过该首字节来探测接受到的数据是ssl握手包还是http数据。根据ssl协议规定,ssl握手包的首字节中包含有ssl协议的版本信息。nginx根据此来判断是进行ssl握手还是返回正常处理http请求(实际返回应答400 BAD REQUEST)
7.正常的http协议包处理直接调用ngx_http_process_request_line处理http请求,并将读事件处理函数设置成ngx_http_process_request_line。(实际处理结果是向客户端返回400 BAD REQUET,在ngx_http_process_request中又对r->plain_http标志的单独处理。)
8.若ssl握手完成 (c->ssl->handshaked由ngx_ssl_handshake()确定握手完成后设为1),设置读事件处理函数为ngx_http_process_request_line,并调用此函数正常处理http请求。若ssl握手没完成(则说明ssl握手出错),则返回400 BAD REQUST给客户端。


出现408的原因:
1.nginx对读取请求头有超时限制,ngx_http_process_request_headers函数作为读事件处理函数,一并处理了超时事件,如果读超时了,nginx直接给该请求返回408错误
2.nginx核心对两次请求体的读事件之间做了超时设置,client_body_timeout指令可以设置这个超时时间,默认为60秒,如果下次读事件超时了,nginx会返回408给客户端。

分享到:
评论

相关推荐

    Nginx日志分析工具2.1.0.zip

    总之,Nginx日志分析工具2.1.0是运维人员的得力助手,它能帮助我们从海量的日志数据中提取有价值的信息,从而提升服务器的运营效率和安全性。对于任何使用Nginx的人来说,理解和掌握这样的分析工具都是非常必要的。

    Nginx日志管理介绍

    Nginx日志描述 通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的...

    windows 下 nginx 日志切割

    windows 下nginx 日志切割 结合windows任务计划,实现每天备份日志,并reopen nginx

    基于loki+grafana的在线nginx日志分析系统

    在我们的案例中,Grafana将与Loki集成,通过图形化界面展示Nginx日志,使我们能够实时监控和分析服务器状态。 Docker Compose是Docker的一个工具,允许我们定义和运行多容器的Docker应用程序。在提供的`docker-...

    Filebeat 实时收集 Nginx 日志1

    在 Nginx 配置中,我们可以通过修改 `nginx.conf` 文件来定制日志格式,使其符合 JSON 格式,以便 Filebeat 更好地解析。如文中所示,创建一个名为 `json` 的日志格式,包含时间戳、远程地址、用户、发送的字节数、...

    syslog实现远程nginx日志服务

    总的来说,结合syslog和Nginx日志,我们可以构建一个高效、可扩展的日志管理系统,这对于大型互联网公司的运维工作至关重要。正确地应用和配置这个系统,将大大提高运维效率,降低故障排查难度,为业务的稳定运行...

    nginx日志自动定时切割及清除脚本

    nginx日志自动定时切割及清除脚本

    nginx日志记录post请求的内容和cookies

    ### Nginx 日志记录 POST 请求的内容和 Cookies 在 Web 开发与运维中,Nginx 是一个非常流行的 HTTP 和反向代理服务器。对于开发者来说,掌握如何利用 Nginx 来记录用户发送的 POST 请求内容及 Cookies 信息至关...

    统计Nginx日志里前一个小时的IP数量以及IOS占比

    本话题将围绕“统计Nginx日志里前一个小时的IP数量以及iOS占比”这一主题展开,讲解如何处理Nginx日志中的时间戳,以及编写shell脚本来实现这一目标。 首先,Nginx默认的日志格式通常包含以下字段:远程主机...

    介绍几款nginx日志分析图形化工具.zip

    介绍几款nginx日志分析图形化工具.zip

    Windows系统nginx日志分割批处理脚本

    : 为限制 Nginx日志文件大小增加,文件过大,导致无法收缩日志,在配置好的nginx的安装目录下,可以采用批处理文件对日志,根据实际需要的时间进行自动切割,本脚本以天为单位进行保存。对于日志备份功能,因存储...

    Linux系统Nginx日志解决方案.docx

    在本解决方案中,我们使用 Nginx 作为日志来源,并修改 Nginx 的日志格式为 Json 格式,以便更好地收集和分析日志。 Promtail 的安装和配置 Promtail 是一个轻量级的日志收集器,我们使用它来收集 Nginx 的日志。...

    Nginx日志切割脚本

    Nginx日志切割脚本

    Linux服务器nginx访问日志里出现大量http 400错误的请求分析

    服务器中的错误记录类似于这种: 124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] “-” 400 0 “-” “-” 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] “-” 400 0 “-” “-” 124.65.133.242 – – ...

    nginx日志分析命令

    nginx日志分析命令,可以帮你使用命令获取nginx服务器上所需日志内容

    windows nginx 按天切割日志

    windows nginx 按天切割日志

    nginx日志测试使用 access.log.zip

    `access.log.zip`是一个压缩包,里面包含了Nginx服务器生成的访问日志记录,接下来我们将深入探讨Nginx日志的结构、用途及分析方法。 Nginx的默认日志格式(也称为`combined`格式)如下: ``` $remote_addr - $...

    windows-nginx-log 日志分割

    加到计划任务里,每天自动分割 nginx日志,低分白送,windows版本批处理文件哦

    nginx网站访问日志可视化

    总的来说,"nginx网站访问日志可视化"项目展示了如何利用Python的处理能力、数据库的存储优势,以及pyecharts的可视化特性,从Nginx日志中挖掘有价值的信息,并以直观的方式呈现出来。这不仅对于系统运维人员监控和...

Global site tag (gtag.js) - Google Analytics