Nginx 的超时配置用于控制连接、请求、响应等过程的时间限制,避免资源被长期占用或请求无响应导致的问题。不同场景需配置不同的超时参数,以下是常用的超时配置分类及说明:
一、HTTP 连接层超时(作用于客户端与 Nginx 的连接)
client_body_timeout
client_header_timeout
keepalive_timeout
send_timeout
二、反向代理/ FastCGI 超时(作用于 Nginx 与后端服务的交互)
1. 反向代理(Proxy)场景(如代理到 Tomcat、Node.js 等)
proxy_connect_timeout
作用:Nginx 与后端代理服务器建立连接的超时时间(三次握手阶段)。
默认值:60s
配置示例:
proxy_connect_timeout 10s; # 10秒内未与后端建立连接则超时
proxy_send_timeout
作用:Nginx 向后端代理服务器发送请求数据的超时时间(两次写操作间隔)。
默认值:60s
配置示例:
proxy_send_timeout 20s; # 向后端发送数据间隔超20秒则超时
proxy_read_timeout
作用:Nginx 等待后端代理服务器返回响应的超时时间(从连接建立后开始算)。
场景:若后端处理请求过慢(如复杂计算),超过此时间 Nginx 会返回 504 错误。
默认值:60s
配置示例:
proxy_read_timeout 60s; # 等待后端响应超60秒则超时
2. FastCGI 场景(如处理 PHP 请求,对接 PHP-FPM)
fastcgi_connect_timeout
作用:Nginx 与 FastCGI 进程(如 PHP-FPM)建立连接的超时时间。
默认值:60s
配置示例:
fastcgi_connect_timeout 10s;
fastcgi_send_timeout
作用:Nginx 向 FastCGI 进程发送请求数据的超时时间(两次写操作间隔)。
默认值:60s
配置示例:
fastcgi_send_timeout 20s;
fastcgi_read_timeout
作用:Nginx 等待 FastCGI 进程返回响应的超时时间(关键参数,需与 PHP-FPM 配合)。
场景:PHP 脚本执行时间过长时,若超过此时间,Nginx 会返回 504 错误。
默认值:60s
配置示例(需大于 PHP-FPM 的 request_terminate_timeout):
fastcgi_read_timeout 120s; # 等待PHP-FPM响应超120秒则超时
三、其他常用超时配置
lingering_timeout
- 作用:关闭连接前,等待客户端发送剩余数据的超时时间(用于处理半关闭连接)。
- 默认值:30s
配置示例:
lingering_timeout 5s;
resolver_timeout
四、配置位置
超时配置可根据范围在 http、server 或 location 块中设置:
http 块:全局生效(所有虚拟主机共享);server 块:仅对当前虚拟主机生效;location 块:仅对匹配的请求路径生效(优先级最高)。
示例(针对 PHP 站点的 location 配置):
server {
listen 80;
server_name example.com;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_read_timeout 120s; # PHP脚本执行超时设置
fastcgi_send_timeout 30s;
# 其他FastCGI配置...
}
}
注意事项
- 超时时间需根据业务场景调整(如大文件上传需增大
client_body_timeout,复杂计算接口需增大 proxy_read_timeout 或 fastcgi_read_timeout)。 - 反向代理/FastCGI 超时需与后端服务自身的超时配置配合(如 PHP-FPM 的
request_terminate_timeout、Java 的 tomcat timeout),避免 Nginx 先于后端超时导致 504 错误。 - 配置后需执行
nginx -t 检查语法,再 nginx -s reload 生效。
PHP 及 PHP-FPM 的超时时间配置主要用于控制脚本执行时长、请求处理时限等,避免长时间运行的脚本占用资源或导致服务阻塞。以下是核心配置参数及说明:
一、PHP 内核级超时配置(php.ini)
PHP 本身提供了脚本执行时间的限制,通过 php.ini 中的参数控制,作用于所有 PHP 脚本(包括 CLI 模式,但通常 CLI 会禁用此限制)。
max_execution_time
max_input_time
二、PHP-FPM 进程级超时配置(php-fpm.conf 或 www.conf)
PHP-FPM 作为 FastCGI 进程管理器,提供了更底层的超时控制,优先级高于 php.ini 的 max_execution_time(即使脚本内用 set_time_limit 也无法突破 FPM 的限制)。
request_terminate_timeout
request_slowlog_timeout
process_control_timeout
三、配置位置与生效方式
php.ini:通常位于 /etc/php/7.x/cli/php.ini(CLI 模式)或 /etc/php/7.x/fpm/php.ini(FPM 模式),修改后需重启 PHP-FPM 生效。PHP-FPM 配置文件:
四、关键注意事项
与 Nginx 配合:
Nginx 的 fastcgi_read_timeout 需大于等于 PHP-FPM 的 request_terminate_timeout,否则 Nginx 会先超时返回 504 Gateway Timeout,而 PHP-FPM 可能仍在处理请求。
示例:
# Nginx 配置
location ~ \.php$ {
fastcgi_read_timeout 150s; # 大于 PHP-FPM 的 120s
}
- 避免无限制超时:
生产环境中不建议将 request_terminate_timeout 设为 0(无限制),否则可能因脚本死循环、阻塞等导致进程耗尽资源。 - 长任务处理:
对于需要长时间执行的任务(如数据导出、批量处理),建议采用“异步队列”(如 RabbitMQ)+“后台进程”(如 Supervisor 管理)的方式,而非直接通过 Web 脚本处理,避免触发超时。
通过合理配置 PHP 与 PHP-FPM 的超时参数,可平衡服务稳定性与业务需求,减少因超时导致的异常问题。