Laravel Valet升级PHP 8后Nginx返回Bad Gateway故障求助
问题根因定位
从你提供的所有命令输出,可以直接定位到3个连锁的故障点,直接触发Bad Gateway报错:
- 所有Valet依赖的核心服务(Nginx、PHP-FPM、Dnsmasq)都处于错误停止状态;你的Nginx配置本身语法校验通过,报错完全来自后端没有可用的PHP-FPM进程接收Nginx的转发请求,直接触发Bad Gateway返回。
- 手动测试PHP-FPM启动时,发现Valet和系统默认路径指向的
/usr/local/etc/php/8.0/php-fpm.conf配置文件完全缺失,直接拦截了FPM服务的启动流程。 - 旧的服务配置被错误存放至系统级目录:3个homebrew安装的服务plist文件全部放在
/Library/LaunchDaemons(root权限运行),其中PHP对应的plist还存在文件名拼写错误(写为homebrew.mxcl.php.plis,缺了后缀的t),Valet自身的服务启动plist完全缺失,无法正常接管服务启动流程。
分步修复操作
第一步 清理所有残留的错误服务配置
- 先强制停止所有异常状态的残留服务进程,避免后续配置冲突:
sudo brew services stop nginx dnsmasq php - 删除错误存放在系统级目录的无效plist文件,注意仅删除你输出中列出的3个文件,不要误删其他系统启动配置,尤其是那个带拼写错误的PHP plist:
sudo rm -f /Library/LaunchDaemons/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons/homebrew.mxcl.php.plis
第二步 修复缺失的PHP 8.0 FPM配置
- 先查看PHP 8.0配置目录下的现有文件,确认示例配置存在:
ls /usr/local/etc/php/8.0/
正常Homebrew安装的PHP会在该目录存放php-fpm.conf.default和php-fpm.d/www.conf.default两个默认示例配置,之前的启动失败就是因为没有把示例配置复制为生效配置。 - 复制默认示例为实际生效的配置文件:
cp /usr/local/etc/php/8.0/php-fpm.conf.default /usr/local/etc/php/8.0/php-fpm.confcp /usr/local/etc/php/8.0/php-fpm.d/www.conf.default /usr/local/etc/php/8.0/php-fpm.d/www.conf - 重新执行FPM配置校验命令,确认报错消失:
sudo /usr/local/opt/php/sbin/php-fpm -y /usr/local/etc/php/8.0/php-fpm.conf --test
第三步 重建Valet的服务关联
- 因为当前系统中Valet自身的服务配置完全缺失,直接执行重装命令即可重建所有正确的服务启动文件,不会删除你已经配置好的站点、目录绑定信息:
valet install - 手动强制指定Valet关联当前系统安装的PHP 8.0版本,清除旧的PHP版本关联残留:
valet use php@8.0 - 启动所有Valet管理的服务:
valet start
修复后状态校验
操作完成后逐项确认,避免残留问题:
- 执行
brew services list,确认nginx、php、dnsmasq的运行用户为你的当前登录用户,运行状态为started,不再是root权限下的error状态。 - 执行
valet diagnose,确认所有服务检查项全部通过,无报错提示。 - 访问任意已配置的Valet站点,确认Nginx不再返回Bad Gateway错误,PHP版本输出为8.0.3。
内容的提问来源于stack exchange,提问作者Mohammed Alama
相关产品推荐
相关产品推荐

