在 nginx 中,upstream 轮询的连接超时时间通过 proxy_connect_timeout、proxy_send_timeout 和 proxy_read_timeout 三个指令设置。这些参数决定了 nginx 与后端服务器建立连接、发送请求以及等待响应的最大时长。默认情况下,连接超时为 60 秒,发送和读取超时为 60 秒。你可以根据后端服务的响应速度和网络状况调整这些值,以避免因后端无响应导致的前端请求挂起。

如何配置 upstream 的代理超时参数
要配置 upstream 的代理超时参数,需要在 location 块中使用 proxy_connect_timeout、proxy_send_timeout 和 proxy_read_timeout 指令。这些指令作用于 Nginx 作为反向代理时与后端服务器的通信过程。例如,将连接超时设置为 10 秒,发送和读取超时设置为 30 秒,可以确保 Nginx 不会无限期等待后端响应。

server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend_upstream;
proxy_connect_timeout 10s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
}
upstream backend_upstream {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
上述配置中,proxy_connect_timeout 设置为 10 秒,表示 Nginx 尝试与后端服务器建立 TCP 连接的超时时间。proxy_send_timeout 设置为 30 秒,表示 Nginx 向后端发送请求数据的超时时间。proxy_read_timeout 设置为 30 秒,表示 Nginx 等待后端服务器返回响应数据的超时时间。如果后端服务器在指定时间内未响应,Nginx 将返回 502 Bad Gateway 错误。
不同超时参数的作用与影响
proxy_connect_timeout、proxy_send_timeout 和 proxy_read_timeout 分别控制不同的通信阶段。连接超时影响 Nginx 与后端建立 TCP 连接的速度,发送超时影响请求数据上传的效率,读取超时影响响应数据的接收速度。合理设置这些参数可以避免因后端服务异常导致的请求堆积。

server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend_upstream;
proxy_connect_timeout 5s;
proxy_send_timeout 15s;
proxy_read_timeout 15s;
}
}
upstream backend_upstream {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
在上述配置中,连接超时缩短至 5 秒,发送和读取超时缩短至 15 秒。这种设置适用于对响应速度要求较高的场景,例如实时 API 调用。如果后端服务器在 5 秒内无法建立连接,Nginx 将立即返回错误,避免客户端长时间等待。同样,如果后端在 15 秒内未发送或接收完数据,Nginx 也会终止请求并返回错误。
当后端服务器无响应时 Nginx 的行为
当后端服务器无响应时,Nginx 会根据设置的超时参数返回相应的错误。如果连接超时,Nginx 会尝试下一个后端服务器(如果配置了多个),或者返回 502 Bad Gateway 错误。如果发送或读取超时,Nginx 会直接返回 504 Gateway Timeout 错误。这种行为确保了前端用户不会因后端故障而无限期等待。











