Nginx 中可在 server 块配置的超时指令包括 client_header_timeout、client_body_timeout、send_timeout、keepalive_timeout 和 client_max_bodysize;它们作用于 Nginx 与客户端之间,优先级高于 http 块配置,而 upstream 超时需在 location 或 upstream 块中用 proxy* 指令设置。

在 Nginx 中,不同 server 块可以独立设置各自的超时时间,关键在于把超时指令放在对应的 server 块内(而非全局或 http 块),并注意指令的作用域和生效层级。
哪些超时指令可以在 server 级别配置
以下常用超时指令支持在 server 块中直接设置(优先级高于 http 块中的同名配置):
- client_header_timeout:读取客户端请求头的超时时间
- client_body_timeout:读取客户端请求体的超时时间
- send_timeout:向客户端发送响应的超时时间(两次写操作之间的间隔)
- keepalive_timeout:长连接保持时间(可同时设 timeout 和 header 值)
- client_max_body_size:虽非超时,但常与 body 超时配合控制上传行为
实际配置示例
比如为 API 服务(api.example.com)设更短超时,为静态资源站(static.example.com)设更长 keepalive:
server {
listen 443 ssl;
server_name api.example.com;
<pre class="brush:php;toolbar:false;">client_header_timeout 10;
client_body_timeout 10;
send_timeout 15;
keepalive_timeout 30;
# 其他配置...}
server { listen 443 ssl; server_name static.example.com;
client_header_timeout 60; client_body_timeout 60; send_timeout 300; keepalive_timeout 300; # 其他配置...
}
注意 upstream 超时需单独处理
如果 server 后端有 proxy_pass,上面的指令只控制「Nginx 与客户端」之间的超时;「Nginx 与上游服务器」的超时由 location 或 upstream 块中的 proxy 指令控制,例如:
- proxy_connect_timeout:建立连接到 upstream 的超时
- proxy_send_timeout:发请求给 upstream 的超时
- proxy_read_timeout:收 upstream 响应的超时
这些必须放在 location 或 upstream 块里,server 块中无效。
验证与调试建议
修改后务必测试,避免因超时过短导致正常请求被中断:
- 用
nginx -t检查语法 - 用
curl -v观察响应头和连接行为 - 查看 error log 中是否有
upstream timed out或client timed out日志,区分是哪一环超时 - 对关键接口做压测,确认新超时值在高并发下仍合理


















