温馨提示×

centos lnmp常见错误及解决方法

小樊
42
2026-01-08 04:30:49
栏目: 智能运维

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:确保 datadirsocketpid-fileuser=mysql 等项正确;如 socket 路径自定义,需与 PHP 配置一致。
    • 依赖库缺失:如报 “error while loading shared libraries: .1: cannot open shared object file”,安装 libaiolibaio-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(仅测试)

0