keepalive_timeouthtml
Syntax: keepalive_timeout timeout [header_timeout]; Default: keepalive_timeout 75s; Context: http, server, location The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections. The optional second parameter sets a value in the “Keep-Alive: timeout=time” response header field. Two parameters may differ.
HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开链接。nginx
若是客户端向服务器发送多个请求,每一个请求都要创建各自独立的链接以传输数据。git
HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 链接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的链接,而不须要再创建一个链接。github
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。web
Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每一个 TCP 链接最多能够保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,因此能够设定为 60 秒。若将它设置为 0,就禁止了 keepalive 链接。后端
keepalive时间,默认75s,一般keepalive_timeout应该比client_body_timeout大浏览器
The “Keep-Alive: timeout=time” header field is recognized by Mozilla and Konqueror. MSIE closes keep-alive connections by itself in about 60 seconds.服务器
client_header_timeoutide
Syntax: client_header_timeout time; Default: client_header_timeout 60s; Context: http, server Defines a timeout for reading client request header. If a client does not transmit the entire header within this time, the 408 (Request Time-out) error is returned to the client.
接收客户端header超时, 默认60s, 若是60s内没有收到完整的http包头, 返回408post
客户端向服务端发送一个完整的 request header 的超时时间。若是客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。
client_body_timeout
Syntax: client_body_timeout time; Default: client_body_timeout 60s; Context: http, server, location Defines a timeout for reading client request body. The timeout is set only for a period between two successive read operations, not for the transmission of the whole request body. If a client does not transmit anything within this time, the 408 (Request Time-out) error is returned to the client.
指定客户端与服务端创建链接后发送 request body 的超时时间。若是客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
接收客户端body超时, 默认60s, 若是连续的60s内没有收到客户端的1个字节, 返回408
send_timeout
Syntax: send_timeout time; Default: send_timeout 60s; Context: http, server, location Sets a timeout for transmitting a response to the client. The timeout is set only between two successive write operations, not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.
服务端向客户端传输数据的超时时间。默认60s, 若是连续的60s内客户端没有收到1个字节, 链接关闭
客户度链接nginx超时, 建议5s内
lingering_timeout
Syntax: lingering_timeout time; Default: lingering_timeout 5s; Context: http, server, location When lingering_close is in effect, this directive specifies the maximum waiting time for more client data to arrive. If data are not received during this time,the connection is closed. Otherwise, the data are read and ignored, and nginx starts waiting for more data again. The “wait-read-ignore” cycle is repeated, but no longer than specified by the lingering_time directive.
能够理解为TCP链接关闭时的SO_LINGER延时设置,默认5s。 在关闭链接前,会检测是否有用户发送的数据到达服务器,若是超过lingering_timeout时间后尚未数据可读,就直接关闭链接;不然,必须在读取完链接缓冲区上的数据并丢弃掉后才会关闭链接。
resolver_timeout
Syntax: resolver_timeout time; Default: resolver_timeout 30s; Context: http, server, location Sets a timeout for name resolution, for example: resolver_timeout 5s;
域名解析超时,默认30s
proxy_connect_timeout
Syntax: proxy_connect_timeout time; Default: proxy_connect_timeout 60s; Context: http, server, location Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.
nginx与upstream server的链接超时时间, 一般不要超过75秒.默认:60s。 这个不是等待后端返回页面的时间,那是由proxy_read_timeout声明的。若是你的upstream服务器起来了,可是hanging住了(例如,没有足够的线程处理请求,因此把你的请求放到请求池里稍后处理),那么这个声明是没有用的,因为与upstream服务器的链接已经创建了。
proxy_read_timeout
Syntax: proxy_read_timeout time; Default: proxy_read_timeout 60s; Context: http, server, location Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.
定义一个nginx等待real server响应数据的超时时间, 超时只在两次连续的读操做之间设置, 而不是用于传输整个响应。默认60s, 若是连续的60s内没有收到1个字节, 链接关闭
proxy_send_timeout
Syntax: proxy_send_timeout time; Default: proxy_send_timeout 60s; Context: http, server, location Sets a timeout for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.
nginx发送数据至upstream server超时, 超时只是在两次连续的写操做之间设置,不是为了整个发送期间。若是超时后,upstream没有收到新的数据,nginx会关闭链接。默认60s, 若是连续的60s内没有发送1个字节, 链接关闭
其它:
1. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout
2. 499错误:https://aliasmee.github.io/post/questions-about-proxy-connect-timeout-on-nginx/