nginx代理超时与重试知识。
nginx主要有4类超时配置:客户端超时设置、dns解析超时配置、代理超时设置、ngx_lua模块lua相关超时设置。
- 客户端超时设置
对于客户端超时主要设置有读取请求头超时时间、读取请求体超时时间、发送响应超时时间、长连接超时时间。
client_header_timeout time:设置读取请求头超时时间,默认60s,超时则返回408 http code码。
client_body_timeout time:设置客户端内容体超时时间,默认60s,如果超时时间内客户端没有发送请求体,则响应408 httpcode码。
send_timeout time:设置发送响应到客户端的超时时间,默认60s,如,超时时间内客户端没有接受到任何响应,则nginx关闭此连接。
keepalive_timeout:设置http长连接超时时间。
- DNS解析超时设置
resolver_timeout 30s:设置DNS解析超时时间,默认30s。其配合resolver address…[valid=time]进行DNS解析。如使用upstream 设置域名服务。
- 代理超时设置
主要包含三组配置:网络连接/读写超时设置、失败重试机制设置、upstream存活超时设置。
- 网络连接/读写超时设置
proxy_connect_timeout time:与上游/后端服务器建立连接的超时时间,默认为60s,最长为75s。
proxy_read_timeout time:设置读取后端服务器响应的超时时间,默认60s,若在此超时时间后端服务器没有发送任何响应,则nginx关闭此连接。
proxy_send_timeout time:设置往后端发送请求的超时时间,默认为60s。
- 失败重试机制设置
proxy_next_upstream error|timeout|invalid_header|http_500|http_502|http_503…:配置什么情况下需要请求下一台上游服务器进行重试。
proxy_next_upstream_tries number:设置重试次数。默认0表示不限制。
proxy_next_upstream_timeout time:设置重试最大时间,默认0不限制。
综上及proxy_next_upstream_timeout时间内允许Proxy_next_upstream_tries次重试。
- upstream 存活超时设置
max_fails和fail_timeout:配置什么时候将上游服务器认定为不可用/不存活。即上游服务器在fail_timeout时间内失败了max_fails次,则认为该上游服务器不可用/不存活。
- ngx_lua 超时设置
当使用ngx_lua时,也应考虑设置读写超时,如
lua_socket_connect_timeout (time);
lua_socket_send_timeout (time);
lua_socket_read_timeout (time);
注,time具体为单位ms的时间。