nginx 502错误本质是nginx与php-fpm连接失败:需确认php8.1-fpm服务运行、fastcgi_pass路径与php-fpm listen地址严格一致(如unix:/run/php/php8.1-fpm.sock)、socket权限为0660且属www-data组,最后通过error.log和php8.1-fpm.log日志精准定位。

Ubuntu 下 PHP 8.1 访问出现 502 错误,本质是 Nginx 无法把请求成功转发给 PHP-FPM 处理。问题不在于 PHP 是否装好,而在于 Nginx 和 PHP-FPM 之间“没连上”——路径不对、服务没启、权限卡住或配置不匹配。
确认 PHP-FPM 服务已运行且对应版本正确
PHP 8.1 的 FPM 服务名通常是 php8.1-fpm(不是 php-fpm 或 php7.4-fpm)。执行以下命令验证:
- sudo systemctl status php8.1-fpm —— 查看是否 active (running)
- 若显示 inactive 或 failed,运行 sudo systemctl start php8.1-fpm 启动
- 再执行 sudo systemctl enable php8.1-fpm 确保开机自启
- 注意:不要同时启用多个 php*-fpm 服务(如 php7.4-fpm + php8.1-fpm),容易冲突
核对 Nginx 配置中的 fastcgi_pass 路径
Nginx 必须精准指向 PHP-FPM 实际监听的地址。常见错误是写错 socket 路径或协议不一致:
- 打开站点配置(如 /etc/nginx/sites-available/default)
- 找到
location ~ \.php$ { ... }块,检查 fastcgi_pass 行 - 若 PHP-FPM 使用 Unix socket(推荐),应为:
fastcgi_pass unix:/run/php/php8.1-fpm.sock; - 若改用 TCP(如调试时),需同步修改 PHP-FPM 配置中
listen = 127.0.0.1:9000,Nginx 则写:
fastcgi_pass 127.0.0.1:9000; - 改完后务必运行 sudo nginx -t 测试语法,再 sudo systemctl reload nginx
检查 PHP-FPM 池配置与 socket 权限
关键配置在 /etc/php/8.1/fpm/pool.d/www.conf,必须与 Nginx 设置严格一致:
- 确认 listen 行路径和 Nginx 中
fastcgi_pass完全相同(包括 /run/php/ vs /var/run/php/) - 检查 listen.owner 和 listen.group 是否均为 www-data(Nginx 运行用户)
- 确保 listen.mode = 0660,否则 Nginx 无权访问 socket 文件
- 修改后需重启服务:sudo systemctl restart php8.1-fpm
排查日志快速定位根源
别猜,直接看日志:
- Nginx 错误日志:sudo tail -f /var/log/nginx/error.log
重点关注 “connect() to … failed” 或 “No such file or directory” - PHP-FPM 日志:sudo tail -f /var/log/php8.1-fpm.log
查看是否启动失败、监听异常或子进程崩溃 - 若日志提示 socket 文件不存在,先确认 /run/php/ 目录存在且有写权限
可手动创建:sudo mkdir -p /run/php && sudo chown root:www-data /run/php
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











