Details of Nginx's timeout timeout configuration

  • 2020-05-14 05:58:11
  • OfStack

This article describes the timeout (timeout) configuration for Nginx. To share with you, the details are as follows:

Each request processed by Nginx has a corresponding timeout. The performance of Nginx can be improved if these timeout times are properly qualified and the resource is released to handle other requests after the timeout is determined.

keepalive_timeout

HTTP is a stateless protocol. The client sends a request of TCP to the server, and the server disconnects after the response.

If the client sends multiple requests to the server, each request establishes a separate connection to transmit the data.

HTTP has an KeepAlive mode, which tells webserver to keep the TCP connection open after processing one request. If another request is received from the client, the server will take advantage of the connection that has not been closed without having to make another connection.

The KeepAlive stays open for a period of time, during which time they occupy resources. Overcommitment can affect performance.

Nginx USES keepalive_timeout to specify the timeout for KeepAlive (timeout). Specify how long each TCP connection can last. The default value of Nginx is 75 seconds. Some browsers only keep it for 60 seconds at most, so you can set it to 60 seconds. Setting it to 0 disables the keepalive connection.


#  Configuration section : http, server, location
keepalive_timeout 60s;

client_body_timeout

Specifies the timeout time for the client to send request body after establishing a connection with the server. If the client does not send anything within the specified time, Nginx returns HTTP 408 (Request Timed Out).


#  Configuration section : http, server, location
client_body_timeout 20s;

client_header_timeout

The client sends a complete request header timeout to the server. If the client does not send a complete request header within the specified time, Nginx returns HTTP 408 (Request Timed Out).


#  Configuration section : http, server, location
client_header_timeout 10s;

send_timeout

Timeout time for data transfer from the server to the client.


#  Configuration section : http, server, location
send_timeout 30s;

Client degree connection nginx timeout, recommended within 5s

Receive client header timeout, default is 60s, if the full http header is not received within 60s, return 408


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.

Receive client body timeout, default 60s, if successive 60s did not receive 1 byte of client, return 408


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.

keepalive time, default 75s, usually keepalive_timeout should be larger than client_body_timeout


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.

The "Keep-Alive: timeout=time" header field is recognized by and Konqueror MSIE closes keep by in about 60 seconds.

This can be understood as the SO_LINGER delay setting when the TCP connection is closed, with the default of 5s


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.

Domain name resolution timeout, default 30s


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

Send data to client timeout, default is 60s, if the client in continuous 60s does not receive 1 byte, the connection is closed


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.

Connection timeout for nginx and upstream server


#  Configuration section : http, server, location
client_body_timeout 20s;
0

nginx receives upstream server data timeout, default is 60s, if no 1 byte is received within successive 60s, the connection is closed


#  Configuration section : http, server, location
client_body_timeout 20s;
1

nginx sends data to upstream server timeout, default is 60s, if no 1 byte is sent within continuous 60s, the connection is closed


#  Configuration section : http, server, location
client_body_timeout 20s;
2

Related articles: