laravel部署时php-fpm必须正常运行且与nginx监听配置严格匹配,否则必现502错误;需确认服务状态、校验listen路径(如/run/php/php8.1-fpm.sock)、调整pm动态参数,并通过phpinfo或curl验证连通性。

将Laravel项目部署到生产环境时,PHP-FPM进程管理直接决定应用能否稳定响应请求、是否出现502网关错误、以及高并发下是否会因子进程耗尽而拒绝服务——这一步没配对,Nginx再正确也白搭。
确认PHP-FPM服务已安装并运行
在宝塔面板或SSH中执行 systemctl status php-fpm(若使用PHP 8.1则为 systemctl status php81-fpm),检查状态是否为“active (running)”。若提示“Unit not found”,说明PHP-FPM未安装或未启用对应版本。
宝塔用户直接进「软件商店」→ 找到已安装的PHP版本 → 点击「设置」→「服务管理」→ 确保「PHP-FPM」开关为开启状态。这一步漏掉,后续所有配置都无效。
校验PHP-FPM监听方式与Nginx匹配
打开宝塔中该PHP版本的配置文件:「软件商店」→ 进入PHP管理 → 「配置修改」→ 找到 www.conf 文件(路径通常为 /www/server/php/81/etc/php-fpm.d/www.conf)。
重点检查三行配置是否如下(以PHP 8.1为例):
listen = /run/php/php8.1-fpm.socklisten.owner = wwwlisten.group = www
注意:【Nginx配置中fastcgi_pass必须指向同一sock路径】。宝塔默认新建站点时会自动填对,但若手动改过PHP版本或迁移过项目,此处极易错配成 127.0.0.1:9000 或旧版sock路径,导致502错误。
调整PHP-FPM进程池参数应对真实流量
第一步:在 www.conf 中定位到 [www] 段落下方。
第二步:按实际服务器内存和预估QPS修改以下参数:
pm = dynamic(不建议用static,突发流量易打满)pm.max_children = 30(4GB内存服务器建议值;每子进程约占用20–35MB内存)pm.start_servers = 5pm.min_spare_servers = 3pm.max_spare_servers = 10pm.max_requests = 500(防内存泄漏,处理500个请求后自动重启子进程)
改完保存,然后执行 systemctl reload php81-fpm(或对应版本命令)。不要用restart,reload可平滑切换而不中断正在处理的请求。
验证PHP-FPM是否被Nginx正确调用
方法一:在Laravel项目根目录下创建 test.php,内容为 <?php phpinfo(); ?>,通过浏览器访问 http://your-domain.com/test.php。若显示PHP信息页,说明通路正常。
方法二:SSH中执行 curl -I http://127.0.0.1/test.php,返回HTTP 200且含 X-Powered-By: PHP 头即成功。
方法三:查看PHP-FPM错误日志 —— 宝塔路径为 /www/wwwlogs/php81-fpm.log,搜索关键词 WARNING 或 ERROR,重点关注 unable to bind listening socket 或 failed to listen 类报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











