Nginx超时设定
最近针对公司的goscon网关发了一个PR,新增了握手阶段的超时判定。现在回顾一下Nginx的所有超时判定,看看目前还缺少哪些判定
ngx_http_core_module包含的timeout:
client_header_timeout (默认60秒)
client_body_timeout (默认60秒)
keepalive_timeout (默认75秒)
lingering_timeout (默认5秒)
resolver_timeout (默认30秒)
send_timeout (默认60秒)
上述参数对应的行为如下:
client_header_timeout对应的是客户端发送http请求头的行为client_body_timeout对应的是客户端发送http消息体的行为keepalive_timeout对应的是http 1.1协议里的保活时长lingering_timeout是配合lingering_close使用的,就是说关闭socket前,客户端还有数据发给服务器的话,lingering_close用于设定要不要等客户端继续发,lingering_timeout决定等多久。这里是一个等待-读取-抛弃数据的循环,有可能重复多次,但是每次等待都不会超过lingering_timeout设定的时长resolver_timeout对应的是域名解析的时长send_timeout对应的是发送http响应给客户端时的超时。这里对应的是两次写操作之间的时长,经过了send_timeout的时间后,还不能写的话,就关闭连接。
对应到goscon,目前的超时参数,是reuseTimeout和uploadMaxDelay。reuseTimeout会在read/write操作异常的时候生效,度过reuseTimeout时间后,goscon保持的连接对就会被释放,里面的缓存数据都会丢掉。从行为上看,有点类似Nginx的keepalive_timeout。
uploadMaxDelay是用在给socket设置读超时上的,只要设置了这个参数(和optUploadMinPacket),每次从socket里读数据都会设置一个deadline。超过deadline后,会返回错误。这里漏了一个写的超时,留了个SetWriteDeadline的接口,但是没有调用。每次写操作也应该有类似的流程,超过delay后write就返回error,Timeout()==True。这个参数类似于Nginx的send_timeout,针对的是两次成功写操作的间隔。缺陷是对方依然可以每次读1个字节,然后等满一次timeout来占用资源。
这次goscon新增的握手阶段的超时(handshakeTimeout),类似于client_header_timeout+client_body_timeout+send_timeout,包含了服务器对客户端的一次读,对客户端的一次写。之前只要连上tcp,不进行握手操作,不会有任何超时机制,目前新增的超时可以针对这种情况做处理。
Nginx超时设定的更多相关文章
- nginx超时重发
最近一直遇到一个bug: 客户端会二次请求服务端,服务端多次调用remote服务. 特点是,这些请求都是模型切片相关的,耗时很长的请求,往往需要1分钟左右. 开始以为是客户端代码有问题,进行了二次请求 ...
- Erlang进程间消息接收超时设定
Erlang消息接收函数,一般都会设计成尾递归调用自己的模式.但是这样的模式,如果没有消息则会无限的等待下去,所以为了不无限等待,这里可以加个超时设定,例如: flush() -> re ...
- nginx 超时问题: upstream timed out (110: Connection timed out) while reading response header from upstream
目录 错误内容 错误原因 错误解决办法 错误内容 我们可以在error.log 里面可以看到 错误内容:upstream timed out (110: Connection timed out) w ...
- 支持xhr浏览器:超时设定、加载事件、进度事件
各个浏览器虽然都支持xhr,但还是有些差异. 1.超时设定 IE8为xhr对象添加了一个timeout属性,表示请求在等待响应多少毫秒后就终止.再给timeout这只一个数值后,如果在规定的时间内浏览 ...
- Nginx超时配置
Nginx超时配置 1.client_header_timeout 语法client_header_timeout time 默认值60s 上下文http server 说明 指定等待client发送 ...
- php nginx超时出错
执行PHP操作大文件insert mysql数据库时,出现这个错误提示 The page you are looking for is temporarily unavailable.Please t ...
- PHP查询数据库较慢,nginx 超时 返回 504:Sorry, the page you are looking for is currently unavailable.
现象: PHP查询数据库较慢,大约 60s 后 nginx 返回 504:Sorry, the page you are looking for is currently unavailable. 检 ...
- nginx超时问题
一. 戏说不管你是做运维还是做开发,哪怕你是游客,时不时会遇到502 Bad Gateway或504 Gateway Time-out.出现这页面,把服务重启下,再实在不行重启下服务器,问题就解决了, ...
- php-fpm nginx 超时参数设置
php-fpm:request_terminate_timeout = 30php.ini:max_execution_time = 30 request_terminate_timeout 适用于, ...
随机推荐
- SpringCloud学习笔记(十一、SpringCloud总结)
SpringCloud Config: 1.动态刷新配置:通过job调用Set<String> keys = contextRefresher.refresh()这段代码即可. 2.如何实 ...
- C++ std::vector 基本用法
#include <iostream> #include <vector> using namespace std; int main() { // 初始化的方式 std::v ...
- 多对多表结构的设计ManyToManyField(不会生成某一列、生成一张表):
示例: 脚本: from django.db import models# Create your models here. class Publisher(models.Model): name = ...
- C++入门到理解之文件操作(文本文件的读写+二进制文件的读写)
原文地址http://www.javayihao.top/detail/168 一:概述 1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存. 2. ...
- 哈希算法原理【Java实现】(十)
前言 在入学时,学校为我们每位童鞋建立一个档案信息,当然每个档案信息都对应档案编号,还有比如在学校图书馆,图书馆为每本书都编了唯一的一个书籍号,那么问题来了,当我们需要通过档案号快速查到对应档案信息或 ...
- C#属性方法 构造函数(不知道自己理解的对不对)
using System; namespace test { class Program { static void Main(string[] args) { Cat kitty = new Cat ...
- ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试
想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试. 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的 ...
- SSM框架之SpringMVC(2)参数绑定及自定义类型转换
SpringMVC(2)参数绑定及自定义类型转换 1.请求参数的绑定 1.1. 请求参数的绑定说明 1.1.1.绑定机制 表单提交的数据都是k=v格式的 username=haha&passw ...
- HTML基础——表单的应用
1.表单的构成 一个完整的表单由表单控件(表单元素).提示信息和表单域3个部分构成. 表单控件:包含了具体的表单功能项,如单行文本输入框.密码输入框.复选框.提交按钮.搜索框等. 提示信息:一个表单中 ...
- mago3DJS 应用
用于3D多块可视化的开源JavaScript库 生成3D GIS平台,集成和可视化AEC(建筑,工程,建筑)区域和传统的3D空间信息(3D GIS).将AEC和3D GIS集成到Web浏览器中,室内, ...