找不到Laravel Valet的Nginx与PHP配置文件,超时问题求助
解决Laravel Valet下长API请求的504超时问题
问题根源
日志显示upstream timed out (60: Operation timed out) while reading response header from upstream,说明是Nginx与PHP-FPM之间的连接超时,而非PHP脚本本身或curl的超时设置。最新macOS中Homebrew默认路径已变更,原/usr/local/etc不再是配置目录,需找到新路径修改Nginx和PHP-FPM的超时参数。
解决步骤
1. 修改Nginx的FastCGI超时设置
Apple Silicon架构的macOS中,Homebrew安装的Nginx配置路径为/opt/homebrew/etc/nginx:
- 打开Nginx全局配置文件:
nano /opt/homebrew/etc/nginx/nginx.conf - 在
http代码块中添加或修改以下参数(设置值需长于API响应时间,示例为240秒即4分钟):fastcgi_read_timeout 240s; fastcgi_send_timeout 240s; fastcgi_connect_timeout 240s; - 若仅需针对单个Valet站点生效,可修改该站点的专属Nginx配置文件,路径为
~/.config/valet/Nginx/{你的站点域名}.test,在location ~ \.php$块内添加上述fastcgi超时参数。
2. 修改PHP-FPM的超时配置
Valet使用Homebrew安装的PHP,找到对应PHP版本的配置文件(替换{PHP_VERSION}为你的实际版本,比如8.2):
- 打开PHP-FPM的www.conf文件:
nano /opt/homebrew/etc/php/{PHP_VERSION}/php-fpm.d/www.conf - 修改以下核心参数:
; 设置脚本最大执行时间,需大于API响应时长 request_terminate_timeout = 240s ; 动态进程管理模式下,可调整空闲进程超时(可选) pm.process_idle_timeout = 240s - 同时确认php.ini中的对应设置(可通过
php --ini命令找到php.ini路径):max_execution_time = 240
3. 重启Valet服务
修改配置后必须重启服务才能生效:
valet restart
关键说明
- 代码中设置的
ini_set('max_execution_time', ...)和set_time_limit()会被PHP-FPM的request_terminate_timeout参数覆盖,因此必须修改配置文件才能生效。 - curl的
CURLOPT_TIMEOUT仅控制curl请求本身的超时,若你的PHP脚本是被Nginx作为上游服务调用,需确保Nginx和PHP-FPM的超时设置均覆盖API所需时长。
内容的提问来源于stack exchange,提问作者Johnx
相关产品推荐
相关产品推荐

