nginx + lua 开发中过程中 post body 过大返回 4xx (续)
背景
随着业务发展会出现较大的 post body 数据,按照nginx + lua 开发中过程中 post body 过大返回 4xx提到的方式修改后,大部分情况下 post body 正常接收并处理落日志。但会偶现空日志的情况。
问题分析
经过多轮本地和沙盒压测,复现了问题。由于在出现空日志情况是 error 日志并没留下相关信息,随后做了如下处理:
- 把 error 日志级别调到 debug,当问题复现时,error.log 中会有客户端过早断开连接类似的日子打出。
- 在 access 日志中添加 request_time, status,等信息,发现出现空日志时,status=408,request_time 都比较长。
因此,可以明确出现该问题是客户端链接超时造成的。
解决方案
为解决该问题,做如下优化:
调整超时时间,和 buffer
1 | client_body_timeout 10s; |
开启 access buffer 和 if
1 | log_format main escape=json '[$log_time] [$logid] [INFO] $click_info'; |
只有真确处理了请求才会写日志。客户端在收到 408 时,会将 body 拆分重传。