我们项目中一直在用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日志描述 通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的...
windows 下nginx 日志切割 结合windows任务计划,实现每天备份日志,并reopen nginx
windows版Nginx日志分析工具2.1.0
nginx日志自动定时切割及清除脚本
网上查了一下nginx日志记录post请求的内容的方法,主要都是通过LUA实现的,我不知道什么是LUA,因此仅用proxy_pass指令实现保存post请求的内容
Filebeat实时收集Nginx日志说明之所以使用 beats 家族的 Filebeat 来替代 Logstash 是因为 Logstash实在太消耗资源了
介绍几款nginx日志分析图形化工具.zip
Nginx日志切割脚本
nginx日志分析命令,可以帮你使用命令获取nginx服务器上所需日志内容
基于docker-compose的loki+grafana+nginx一键部署
实验一:Nginx日志配置 实验目的 熟悉nginx并进行nginx日志配置 实验内容 查看配置文件信息 打开nginx主配置文件 配置nginx日志 实验环境 kali系统 实验步骤 1.查看nginx版本情况 在kali中输入“nginx -t”来查看...
服务器中的错误记录类似于这种: 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日志,Linux系统日志下的Nginx 日志可以查看系统运行记录和出错说明,对Nginx 日志的分析可以了解系统运行的状态。那么Linux系统Nginx日志怎么分析呢?下面小编为你详解一下...
本解本实现了使用shell脚本实现nginx日志分割,大家如果没资源分下载,可以转至:https://mp.csdn.net/mdeditor/85233117# 去查看源代码。谢谢大家
goaccess nginx日志分析工具
nginx日志测试使用 access.log.zip
利用crontab定时机制触发shell脚本,自动切割nginx的日志文件,并实现自动清理,可直接在服务器上上传使用
ELK处理nginx日志,比较详细的介绍了利用geoip将nginx的访问日志中客户端IP分布地址区域给展现出来,非常直观,有兴趣的朋友可以按照文档做做实验玩玩
容器化nginx日志分割、定时压缩、定时删除脚本,生产环境亲测无问题
包含源码和编译好的文件夹。 编译好的可以直接拷贝使用,配置log格式的时候在文件名中加上 $date_udf 变量即可(如:access_log logs/$date_udf.access.log main; 将在 logs目录下生成类似 2014-01-21.access.log 的...