nginx的超时时间

来源:6-12 代理场景下Nginx与上游服务建立连接细节

慕妹2362023

2019-12-07

老师你好:

你在课程中提到了三个超时时间:有点疑惑:keepalive 65s; 是客户端–>nginx的超时时间 这个没问题。

keepalive 32;
keeplaive_requests 100;
keepalive_timeout 60s;
这三个指标和 
proxy_connect_time
proxy_connect_send  
之间的关系是?不是太能理解,还请老师纠正。
  1. 还有一个就是 proxy_set_header 中你提到了默认的情况下是没有长连接的,需要修改 proxy_set_header keepalive; 这样才开启长连接? 我是否可以理解只有修改为了长连接,上面的 keeplaive keepalive_requests等这些参数才奏效?
写回答

1回答

酷田

2019-12-10

keepalive_timout 65s;    # 客户端到Nginx开启长连接

keepalive 32;         # Nginx到上游应用服务器的连接池里面最大的空闲长连接数量。也就是最多有32个空闲的长连接

keepalive_requests 100;     # Nginx到上游应用服务器的一个长连接最多可承载处理的HTTP请求个数,最多处理100个,到100个后自动关闭该连接,有需要Nginx会再生成新的长连接

keepalive_timeout 60s;      # Nginx到上游应用服务器的一个长连接最大超时时长,到了60s后即使仍然有很多HTTP请求需要处理,但依然关闭,重新打开新的

 proxy_connect_timeout  30s    # Nginx和上游应用服务器建立连接的超时时间,也就是TCP发起握手等候响应超时时间。比如后端服务器非常繁忙,负载很大,Nginx发起请求到后端后,长时间没返回,不能无限等待,因此设定超时时长

proxy_send_timeout  60s   # Nginx给上游应用服务器发送HTTP请求的间隔时间,比如第一次发送完HTTP请求后,过了60秒没有发送新的请求,也必须强制关闭该连接

另外一个问题是你所说的proxy_set_header,这个是因为长连接实在HTTP/1.1版本之后才有的,因此对于极少数浏览器客户端,可能发送的请求头是HTTP/1.0的,因此这些请求头会由Nginx收到后原封不动的转发到上游,那可能就会导致长连接失效,因为HTTP/1.0不支持长连接。所以需要做这些设置,这是一种以防万一的做法。

看能否理解,如果不理解,继续交流哦


0
1
小毅Harry
我个人认为大家有点迷糊是因为都是keepalive_timeout,由于在不同的上下文,所以针对的配置点不一样。本质上都是控制http连接的,但是在http,server就主要控制的是客户端到nginx,而在upstream控制就是nginx到上游服务。 不知道我这样理解有问题么?
2020-03-11
共1条回复

Nginx体系化深度精讲 给开发和运维的刚需课程

快速精通Nginx1.17 ,体系与深度并存,轻松搞定企业级痛点问题

631 学习 · 161 问题

查看课程