开发学院

您的位置:首页>技术文章>正文

技术文章

Ubuntu24 LNMP Nginx 启动失败 & PHP 页面 502 错误完整排查

开发学院2026-06-11 13:19:45
在Ubuntu 24.04系统搭建LNMP(Nginx+MySQL+PHP)环境过程中,Nginx无法启动、PHP网页访问提示502 Bad Gateway是最常见的两类故障问题。

  在Ubuntu 24.04系统搭建LNMP(Nginx+MySQL+PHP)环境过程中,Nginx无法启动、PHP网页访问提示502 Bad Gateway是最常见的两类故障问题。其中Nginx启动失败多由端口占用、配置语法错误、系统服务冲突导致,而502报错核心原因是Nginx与PHP-FPM通信异常,涵盖PHP服务未运行、socket文件缺失、权限不匹配、运行用户不一致等多种情况。为了快速定位并彻底解决这类问题,本文整理了一套完整、有序、可直接复制执行的排查流程与修复方案,适配自建一键LNMP脚本部署的环境,从端口检测、配置校验、服务状态核查、权限修复到日志排错全覆盖,新手可按步骤逐一操作,快速恢复网站正常访问。

场景1:安装完成后 Nginx 启动失败

执行 systemctl start nginx 报错、启动失败,按顺序排查。

1. 排查80端口被占用(最常见)

查看占用命令

# 方案1(需安装net-tools)
sudo netstat -tlnp | grep :80
# 方案2(系统自带,无需额外安装)
sudo ss -tlnp | grep :80

典型冲突:Apache2占用80端口

Ubuntu自带apache容易抢占80,直接停止并禁用开机自启:

sudo systemctl stop apache2
sudo systemctl disable apache2

其他程序占用则根据PID杀掉进程。

2. 校验Nginx全部配置文件语法

配置写错会直接启动失败,一键检测并打印错误行:

sudo nginx -t

- test is successful:配置无语法问题

- 出现 error:根据提示修改对应conf配置文件

3. 查看详细报错日志(终极定位)

Nginx专属错误日志

# 查看最后50行错误

sudo tail -50 /var/log/nginx/error.log

systemd服务启动日志(看启动崩溃原因)

sudo journalctl -xeu nginx.service --no-pager | tail -30

场景2:Nginx能正常启动,访问PHP页面提示 502 Bad Gateway

502代表Nginx无法和PHP-FPM通信,逐条按顺序检测修复。

1. 确认PHP8.3-FPM服务正常运行

# 查看运行状态

sudo systemctl status php8.3-fpm

- 状态为 inactive/dead:启动并设置开机自启

sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm

2. 检查PHP-FPM监听socket文件是否存在

脚本中Nginx配置依赖 /run/php/php8.3-fpm.sock,文件丢失直接502

ls -la /run/php/php8.3-fpm.sock

无文件说明php-fpm未正常启动,回到上一步重启php服务。

3. 修复socket权限(权限不足导致Nginx无法读写)

Nginx运行用户www-data无socket访问权限是高频502诱因:

# 赋予php socket目录归属权

sudo chown -R www-data:www-data /run/php
sudo chmod -R 755 /run/php

4. 修复网站根目录权限

网站代码目录不属于www-data会产生读写异常、502、空白页:

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

5. 检查Nginx运行用户配置

打开Nginx主配置:

vim /etc/nginx/nginx.conf

找到开头 user; 配置,必须改为:

user www-data;

如果是nginx/root等其他用户,修改保存,执行 sudo nginx -t 校验配置。

6. 重载所有服务使修改生效

sudo systemctl restart php8.3-fpm nginx

7. 再次查看502详细错误日志

sudo tail -20 /var/log/nginx/error.log

日志会明确打印:权限拒绝、socket不存在、php服务断开等具体原因。

一键修复脚本(出现502时直接复制执行)

整合上面所有权限修复命令,快速修复权限类502问题:

#!/bin/bash
# LNMP 502错误一键修复
sudo systemctl start php8.3-fpm
sudo chown -R www-data:www-data /run/php
sudo chmod -R 755 /run/php
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
sudo nginx -t
sudo systemctl restart php8.3-fpm nginx
echo "修复完成,请重新访问页面"

四、补充常见报错对应解决方案

1. bind() to 0.0.0.0:80 failed (98: Address already in use)

80端口被占用 → 执行ss命令排查,停止apache/其他占用程序。

2. connect() to unix:/run/php/php8.3-fpm.sock failed (13: Permission denied)

socket权限不足 → 执行socket授权命令。

3. connect() to unix:/run/php/php8.3-fpm.sock failed (2: No such file or directory)

php-fpm未启动 → start php8.3-fpm。

4. nginx: configuration file /etc/nginx/nginx.conf test failed

nginx配置语法错误 → nginx -t定位错误行修改配置。