Laravel Valet异常排查:PHP-FPM SIGSEGV、Nginx上游连接中断及数据库访问问题
解决Laravel Valet 4.1.3 + PHP 8.2.8在macOS Big Sur 11.7.9的502错误与PHP-FPM段错误问题
问题背景
在macOS BigSur 11.7.9上使用Laravel Valet 4.1.3时出现三类异常:
- PHP-FPM触发SIGSEGV段错误,子进程意外终止
- Nginx返回
upstream prematurely closed connection错误,导致网站出现502 Bad Gateway - 仅通过Valet访问PostgreSQL@14数据库时触发错误,直接测试数据库连接或使用
php artisan serve运行项目时无异常
系统信息
- macOS BigSur 11.7.9
- PHP版本:8.2.8 (cli)
- Laravel框架版本:9.52.12
- Valet关联PHP版本:php@8.2
错误日志
PHP-FPM日志
[01-Aug-2023 09:13:04] WARNING: [pool valet] child 79760 exited on signal 11 (SIGSEGV) after 3.751510 seconds from start [01-Aug-2023 09:13:04] NOTICE: [pool valet] child 79768 started
Nginx日志
2023/08/01 08:56:36 [error] 73231#0: *28 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: gmreproducciones.test, request: "GET / HTTP/2.0", upstream: "fastcgi://unix:/Users/juliofranco/.config/valet/valet.sock:", host: "gmreproducciones.test" 2023/08/01 09:13:04 [error] 73231#0: *35 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: gmreproducciones.test, request: "GET / HTTP/2.0", upstream: "fastcgi://unix:/Users/juliofranco/.config/valet/valet.sock:", host: "gmreproducciones.test"
排查与解决方案
1. 排查PHP扩展冲突(核心原因大概率在此)
段错误(SIGSEGV)通常由PHP扩展的内存问题或兼容性冲突导致,尤其是数据库相关扩展:
- 执行
php -m查看已加载的扩展,禁用非必要的第三方扩展(如xdebug、opcache以外的扩展),重启PHP-FPM和Valet后测试 - 重新编译安装PostgreSQL相关扩展:
brew reinstall php@8.2 postgresql@14 - 验证扩展加载:执行
php -m | grep pgsql,确保pdo_pgsql和pgsql两个扩展都存在
2. 调整PHP-FPM配置参数
编辑PHP-FPM的Valet池配置文件(路径:/usr/local/etc/php/8.2/php-fpm.d/valet.conf),调整以下参数避免进程崩溃:
pm.max_children = 5 pm.process_idle_timeout = 10s request_terminate_timeout = 30s
修改后重启PHP-FPM:
brew services restart php@8.2
3. 重置Valet环境
清理Valet残留配置,重新初始化环境:
valet uninstall rm -rf ~/.config/valet composer global require laravel/valet valet install # 重新关联站点,根据实际情况选择命令 valet park # 若使用站点批量托管功能 # 或 valet link # 若单独关联单个站点
4. 修正数据库连接配置
检查Laravel项目的.env文件,将DB_HOST设置为127.0.0.1而非localhost,强制使用TCP连接避免套接字冲突:
DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=你的数据库名 DB_USERNAME=你的数据库用户名 DB_PASSWORD=你的数据库密码
5. 降级PHP版本(终极方案)
若以上方法无效,可能是PHP 8.2与Valet 4.1.3在macOS Big Sur上存在兼容性问题,尝试降级到PHP 8.1:
brew install php@8.1 valet use php@8.1 brew services restart php@8.1 valet restart
内容的提问来源于stack exchange,提问作者Julio Franco
相关产品推荐
相关产品推荐

