【转】Nginx 的超时 timeout 配置详解

Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。

keepalive_timeout

HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。

HTTP 有一个 KeepAlive 模式,它告诉 web server 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间( timeout ),指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒(通常 keepalive_timeout 应该比 client_body_timeout 大),有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0 ,就禁止了 keepalive 连接。

# 配置段: http 、server 、location
keepalive_timeout 60s;
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.

client_body_timeout

指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408( Request Timed Out ),Nginx 的默认值是 60 秒。

# 配置段: http 、server 、location
client_body_timeout 20s;
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.

client_header_timeout

客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header ,Nginx 返回 HTTP 408( Request Timed Out ),Nginx 的默认值是 60 秒。

# 配置段: http 、server 、location
client_header_timeout 10s;
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.

send_timeout

服务端向客户端传输数据的超时时间,Nginx 的默认值是 60 秒,如果连续的 60 s 内客户端 1 个字节都没有收到,连接关闭。

# 配置段: http 、server 、location
send_timeout 30s;
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.

lingering_timeout

可以理解为 TCP 连接关闭时的 SO_LINGER 延时设置,Nginx 的默认值是 5 秒。

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.

resolver_timeout

域名解析超时,Nginx 的默认值是 30 秒。

Syntax: resolver_timeout time;
Default:  
resolver_timeout 30s;
Context:  http, server, location
Sets a timeout for name resolution, for example:
resolver_timeout 5s;

proxy_connect_timeout

Nginx 与 upstream server 的连接超时时间,Nginx 的默认值是 60 秒。

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.

proxy_read_timeout

Nginx 接收 upstream server 数据超时,Nginx 的默认值是 60 秒,如果连续的 60 s 内 1 个字节都没有收到,连接关闭。

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.

proxy_send_timeout

Nginx 发送数据至 upstream server 超时,Nginx 的默认值是 60 秒,如果连续的 60 s 内 1 个字节都没有发送,连接关闭。

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.

 

参考自:

  • https://www.jb51.net/article/131868.htm
打赏作者
这里是 “ CCIE 工程师社区 ” 官方的捐款通道,您是否可以考虑请我们喝杯咖啡呢?

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

Was this article helpful?

Related Articles

Leave A Comment?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据