在 Ubuntu 下,PHP-FPM 的“超时时间”其实分好几个层面,很多人容易混淆。下面按常见场景给你说明怎么配置。
max_execution_time = 30
单位:秒
表示 PHP 脚本本身最多执行 30 秒
修改后重启 PHP-FPM:
sudo systemctl restart php-fpm
# 或(取决于版本)
sudo systemctl restart php8.1-fpm
set_time_limit(120);
或
ini_set('max_execution_time', 120);
这是 PHP-FPM worker 进程被杀掉的超时,和 php.ini 不同。
/etc/php/8.1/fpm/pool.d/www.conf
(版本号按你实际来)
request_terminate_timeout = 60s
✅ 含义:
重启:
sudo systemctl restart php8.1-fpm
如果你是 Nginx + PHP-FPM,以下也要配,否则 PHP 还没超时,Nginx 先断了。
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_read_timeout 120s;
fastcgi_send_timeout 120s;
include fastcgi_params;
}
或全局:
http {
fastcgi_read_timeout 120s;
}
重启 Nginx:
sudo systemctl restart nginx
idle_timeout = 60s
worker 空闲多久后被回收(不影响请求)
| 现象 | 可能原因 |
|---|---|
| 502 Bad Gateway | request_terminate_timeout 太小 |
| 504 Gateway Timeout | Nginx fastcgi_read_timeout 太小 |
| PHP 没超时但被中断 | FPM 超时杀进程 |
request_terminate_timeout = 60s
max_execution_time = 30
fastcgi_read_timeout 60s;
如果你愿意,可以告诉我:
我可以直接给你一份精确配置。