温馨提示×

如何排查LNMP环境故障

小樊
42
2026-07-23 04:58:36
栏目: 编程语言

排查 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)环境故障,可以按 “分层定位、由外到内” 的思路进行。下面给你一套 系统化排查流程,适合生产环境也适合本地开发。


一、快速定位思路(先问 3 个问题)

  1. 是访问不了,还是访问异常?
    • 打不开网页 → Nginx / 网络 / 端口
    • 能打开但报错 → PHP / MySQL / 程序
  2. 静态文件是否正常?
    • 静态 OK,动态 502/404 → PHP-FPM
  3. 错误是 Nginx 报的,还是程序报的?
    • Nginx 错误 → /var/log/nginx/
    • PHP 错误 → php-fpm.log / php.error_log

二、网络与端口层排查

1️⃣ 检查服务是否运行

ps -ef | grep nginx
ps -ef | grep php-fpm
ps -ef | grep mysqld

或:

systemctl status nginx
systemctl status php-fpm
systemctl status mysql

✅ 没运行就启动:

systemctl start nginx
systemctl start php-fpm
systemctl start mysql

2️⃣ 检查端口监听

ss -lntp

或:

netstat -lntp

常见端口:

  • 80 / 443 → Nginx
  • 9000 → PHP-FPM(TCP 模式)
  • 3306 → MySQL

✅ 如果端口没监听,说明服务没启动或配置错误。


3️⃣ 防火墙 / 安全组

iptables -L -n
# 或
firewall-cmd --list-all

云服务器还要检查:

  • 安全组是否放行 80 / 443
  • 是否限制了 IP

三、Nginx 层排查(最常见)

1️⃣ 检查 Nginx 配置

nginx -t

✅ 如果报错,先看行号,再改配置。


2️⃣ Nginx 错误日志(非常重要)

tail -f /var/log/nginx/error.log

常见错误:

  • connect() failed (111: Connection refused) → PHP-FPM 没启动
  • no live upstreams → upstream 配置错误
  • 403 Forbidden → 权限 / 目录错误
  • 404 Not Found → root / location 配置错误

3️⃣ 访问日志

tail -f /var/log/nginx/access.log

看:

  • 返回状态码(200 / 404 / 500 / 502)

四、PHP 层排查(502 / 空白页)

1️⃣ PHP-FPM 是否运行

ps -ef | grep php-fpm

2️⃣ PHP-FPM 监听方式

grep listen /etc/php-fpm.d/www.conf

常见两种:

listen = 127.0.0.1:9000
# 或
listen = /run/php-fpm/www.sock

✅ Nginx 必须一致:

fastcgi_pass 127.0.0.1:9000;
# 或
fastcgi_pass unix:/run/php-fpm/www.sock;

3️⃣ PHP-FPM 错误日志

tail -f /var/log/php-fpm/error.log

常见错误:

  • pool www does not exist
  • permission denied(sock 权限)

4️⃣ PHP 本身是否报错

在 PHP 文件中:

<?php
phpinfo();

如果空白:

php -v
php -m

五、MySQL / MariaDB 层排查

1️⃣ 数据库是否允许连接

mysql -u root -p

2️⃣ 程序连接失败常见原因

  • 数据库没启动
  • 账号无远程权限
  • 密码错误
  • host 限制(localhost vs 127.0.0.1)

查看用户权限:

SELECT user, host FROM mysql.user;

3️⃣ MySQL 错误日志

tail -f /var/log/mysqld.log

六、权限与目录问题(非常常见)

1️⃣ 网站目录权限

chown -R nginx:nginx /var/www/html
chmod -R 755 /var/www/html

PHP 写目录(如 upload):

chmod -R 777 upload

2️⃣ SELinux(CentOS 常见)

getenforce

临时关闭测试:

setenforce 0

七、典型故障速查表

现象 可能原因
502 Bad Gateway PHP-FPM 没启动 / 端口不一致
404 root / location 配置错误
403 权限 / SELinux
空白页 PHP 报错 / display_errors 关闭
数据库连接失败 MySQL 未启动 / 权限
连接超时 防火墙 / 安全组

八、推荐的标准排查顺序(实战)

  1. nginx -t
  2. systemctl status nginx php-fpm mysql
  3. tail -f /var/log/nginx/error.log
  4. tail -f /var/log/php-fpm/error.log
  5. 检查端口 & 防火墙
  6. 检查 PHP / MySQL 权限

如果你愿意,可以直接把 具体报错信息、系统版本、Nginx 配置 发出来,我可以 精准帮你定位到哪一行配置有问题

0