温馨提示×

怎样排查LNMP环境问题

小樊
45
2026-07-10 22:58:25
栏目: 编程语言

排查 LNMP 环境(Linux + Nginx + MySQL/MariaDB + PHP) 问题,一般按 “分层定位” 的思路来,从系统 → Nginx → PHP → 数据库,逐层缩小范围。下面给你一套 实用排查清单,适合生产环境也适合本地开发。


一、先确认整体状态

1️⃣ 检查各服务是否运行

systemctl status nginx
systemctl status php-fpm
systemctl status mysqld
# 或
systemctl status mariadb

如果某个服务没运行:

systemctl start xxx
journalctl -xe -u xxx

二、Nginx 层排查

2️⃣ 检查 Nginx 配置是否正确

nginx -t

常见错误:

  • 少分号 ;
  • fastcgi_pass 路径错误
  • root 目录不存在

3️⃣ 查看 Nginx 错误日志(非常重要)

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

常见错误:

  • connect() failed (111: Connection refused) → PHP-FPM 没启动
  • 404 Not Found → root 或 index 配置错误
  • 403 Forbidden → 权限问题

4️⃣ 测试静态文件是否正常

curl http://localhost/test.html

✅ 正常 → Nginx 没问题
❌ 不正常 → 看 Nginx 配置或权限


三、PHP 层排查(最常见)

5️⃣ 确认 PHP-FPM 是否监听正确

ps aux | grep 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;

6️⃣ 查看 PHP-FPM 日志

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

常见错误:

  • permission denied(sock 权限)
  • max children reached

7️⃣ 单独测试 PHP 是否执行

创建测试文件:

echo "<?php phpinfo();" > /usr/share/nginx/html/info.php

访问:

http://服务器IP/info.php

✅ 能看到 PHP 信息 → PHP 正常
❌ 下载 / 空白 / 502 → PHP-FPM 或 Nginx 配置问题


四、权限 & 用户问题(非常容易踩坑)

8️⃣ 确认 Nginx / PHP-FPM 用户一致

ps aux | grep nginx
ps aux | grep php-fpm

常见组合:

nginx → nginx
php-fpm → apache / www / nginx

不一致时修改:

; /etc/php-fpm.d/www.conf
user = nginx
group = nginx

并重启:

systemctl restart php-fpm

9️⃣ 目录权限检查

ls -ld /网站目录
ls -l /网站目录

建议:

chown -R nginx:nginx /网站目录
chmod -R 755 /网站目录

五、MySQL / MariaDB 排查

10️⃣ 数据库是否能连接

mysql -u root -p

如果连不上:

systemctl status mysqld
journalctl -xe -u mysqld

11️⃣ PHP 是否能连数据库

测试脚本:

<?php
$conn = new mysqli("127.0.0.1", "user", "password", "db");
if ($conn->connect_error) {
    die("DB error: " . $conn->connect_error);
}
echo "DB OK";

常见问题:

  • 用户没权限
  • host 不是 127.0.0.1
  • 没装 php-mysql

六、防火墙 & SELinux(常被忽略)

12️⃣ 防火墙

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

测试可临时关闭:

systemctl stop firewalld

13️⃣ SELinux(CentOS/RHEL 常见)

getenforce

如果是 Enforcing

setenforce 0

或给 Nginx 授权:

setsebool -P httpd_read_user_content 1

七、快速定位“502 / 504 / 空白页”

现象 大概率原因
502 PHP-FPM 没启动 / sock 权限
504 PHP 执行超时
空白页 PHP 报错但没显示
下载 PHP Nginx 没解析 PHP

八、万能排查顺序(记住这个)

服务是否启动
→ nginx -t
→ Nginx error.log
→ PHP-FPM 是否监听
→ PHP-FPM log
→ 权限
→ 防火墙 / SELinux

如果你愿意,可以直接把 具体报错信息、系统版本、LNMP 版本 发我,我可以帮你 精准定位某一条错误

0