CentOS 下 LNMP 常见错误与排查清单
一 服务无法启动与配置语法
- 典型症状:执行 systemctl 启动失败、页面空白或 502、命令行提示语法错误。
- 快速排查步骤:
- 检查配置语法:Nginx 执行 nginx -t;PHP-FPM 执行 php-fpm -t。
- 查看错误日志:Nginx 查看 /var/log/nginx/error.log;PHP-FPM 查看 /var/log/php-fpm/error.log(路径以实际配置为准)。
- 确认进程与端口:ss -lntp | grep -E ‘(:80|:9000)’;若端口被占用,kill 占用进程或更换端口。
- 确认服务已开机自启:systemctl enable --now nginx php-fpm mariadb。
- 源码安装常见:Nginx 报 “getpwnam(“www”) failed” 时,在 nginx.conf 设置 user www www;;报 “open() “/usr/local/nginx/logs/nginx.pid” failed” 时,用 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 指定配置文件后再启动;PHP-FPM 报找不到 php-fpm.conf 时,执行 cp php-fpm.conf.default php-fpm.conf 后测试并启动。
二 Nginx 与 PHP 通信与权限
- 典型症状:访问 .php 文件被下载、空白页、502 Bad Gateway。
- 处理要点:
- 确认 PHP-FPM 已运行:systemctl status php-fpm;若未运行,启动并设置开机自启。
- 检查 Nginx 的 location ~ .php$ 配置,确保:
- 正确转发:fastcgi_pass 指向 127.0.0.1:9000(或 socket 路径);
- 关键参数:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 必须存在且路径正确;
- 包含:include fastcgi_params;。
- 权限与目录:
- 若 SCRIPT_FILENAME 指向的目录或文件对 Nginx worker 进程用户不可读,会 403 或空白;将目录属主/权限调整为 Nginx 运行用户(如 www:www),并确保 index.php 存在。
- 虚拟机共享目录(如 /mnt/hgfs)常见 403,多为权限或挂载选项问题;可临时放宽权限(如 chmod -R 755/777 仅测试环境)、或改用本地目录并正确设置 SELinux/ACL;必要时在 nginx.conf 顶部设置 user root;(仅测试,生产不建议)。
三 防火墙与 SELinux 导致访问异常
- 典型症状:服务器本机能访问,外网访问超时或拒绝;端口不通。
- 处理要点:
- 放行 Web 端口(以 firewalld 为例):firewall-cmd --permanent --add-service=http --add-service=https;firewall-cmd --reload。
- 临时调试可关闭防火墙:systemctl stop firewalld(测试后请恢复)。
- SELinux 干预常见 403/502:
- 临时宽松:setenforce 0;
- 永久关闭:编辑 /etc/selinux/config,设 SELINUX=disabled,重启生效(生产环境建议保持开启并做策略放行,而非直接关闭)。
四 数据库 MySQL/MariaDB 启动与初始化
- 典型症状:启动失败、The server quit without updating PID file、InnoDB 初始化异常、库/表不可写。
- 处理要点:
- 查看数据目录错误日志(如 /usr/local/mysql/data/*.err 或 /var/log/mysqld.log)定位具体原因。
- 初始化与权限:
- 创建系统用户与数据目录:useradd -r -s /sbin/nologin mysql;chown -R mysql:mysql /var/mysql/data;
- 初始化数据:./scripts/mysql_install_db --datadir=/var/mysql/data --user=mysql(或采用 mysqld --initialize)。
- 配置 /etc/my.cnf:确保 datadir、socket、pid-file、user=mysql 等项正确;如 socket 路径自定义,需与 PHP 配置一致。
- 依赖库缺失:如报 “error while loading shared libraries: .1: cannot open shared object file”,安装 libaio 与 libaio-devel。
- 主机名解析问题:初始化时报 “host could not be looked up”,在 /etc/hosts 添加 “IP 主机名” 映射。
五 快速定位命令清单
- 查看端口与进程:ss -lntp | grep -E ‘(:80|:9000|:3306)’
- Nginx:nginx -t;systemctl status nginx;tail -f /var/log/nginx/error.log
- PHP-FPM:php-fpm -t;systemctl status php-fpm;tail -f /var/log/php-fpm/error.log
- MariaDB/MySQL:systemctl status mariadb;tail -f /var/log/mysqld.log;mysql -uroot -p -e “SHOW VARIABLES LIKE ‘datadir’;”
- 防火墙与 SELinux:firewall-cmd --list-all;getenforce;setenforce 0(仅测试)