温馨提示×

centos lnmp故障如何排查

小樊
33
2025-11-22 02:20:29
栏目: 智能运维

CentOS 上 LNMP 故障排查流程

一 快速定位故障范围

  • 明确现象:是访问不通502/504白屏500、还是服务起不来。记录发生时间影响域名/接口、是否有变更高峰流量
  • 资源体检:用top/htop、vmstat、iostat、df -h查看CPU、内存、磁盘IO、磁盘空间是否异常。
  • 服务状态:用systemctl status nginx php-fpm mariadb查看是否active/running,是否频繁重启。
  • 端口连通:用ss -tulpen | grep -E '80|443|3306’确认端口监听;外部用curl -I http://域名telnet 域名 80测试连通。
  • 防火墙与安全组:确认firewalld/iptables云厂商安全组已放行80/443/3306
  • 日志先行:优先查看Nginx、PHP-FPM、MariaDB/MySQL的错误日志,定位具体报错行与时间点。

二 按组件定位与修复

  • Nginx
    • 配置与语法:执行nginx -t;核对**/etc/nginx/nginx.conf/etc/nginx/conf.d/*.confserver_name、root、listen、location ~ .php$**等。
    • 常见错误:端口被占用(更换端口或释放占用)、root 目录不存在/权限不足(创建目录并修正属主属组)、SELinux 拒绝(临时 setenforce 0 验证,长期用 semanage/fcontext 或布尔值放行)。
    • 访问异常:403 多为目录无索引或权限;502/504 多为后端 PHP-FPM 不可用/超时;500 多为PHP 代码/配置错误
  • PHP-FPM
    • 配置与语法:执行php-fpm -t;核对**/etc/php-fpm.d/www.conflisten(127.0.0.1:9000 或 socket)**、user/grouppm.max_children等。
    • 与 Nginx 对接:确保fastcgi_pass与 FPM 的listen一致;SCRIPT_FILENAME $document_root$fastcgi_script_name必须正确。
    • 常见错误:资源耗尽(调大 pm.max_children/pm.start_servers)、权限/SELinux(FPM 进程用户对session、缓存、代码目录可读写)、代码致命错误(开启 display_errors 临时定位)。
  • MariaDB/MySQL
    • 配置与语法:核对**/etc/my.cnf/etc/mysql/my.cnfdatadir、socket、port、innodb_buffer_pool_size等;必要时用mysqld --verbose --help**检查配置加载。
    • 常见错误:数据目录权限/磁盘满(修复权限或清理空间)、端口被占用InnoDB 恢复失败(查看错误日志,必要时从备份恢复)、连接数/慢查询(优化 SQL、调整 max_connections、开启慢查询日志)。

三 常见症状与处理对照表

症状 优先检查 快速修复
无法访问网站 防火墙/安全组、Nginx 是否运行、端口监听 放行80/443;systemctl restart nginx;ss -tulpen
502 Bad Gateway PHP-FPM 是否运行、Nginx 与 FPM 的fastcgi_pass一致、FPM 资源 php-fpm -t && systemctl restart php-fpm;调大pm.max_children
504 Gateway Timeout FPM 进程忙/慢、Nginx fastcgi_read_timeout 优化慢 PHP/SQL;增大fastcgi_read_timeout与 FPM 进程数
403 Forbidden root 目录权限/index 文件、SELinux chmod/chown 修正;setsebool -P httpd_can_network_connect 1(按需)
500 Internal Server Error PHP 语法/致命错误、FPM 日志 临时开启display_errors;查**/var/log/php-fpm/error.log**
数据库连接失败 用户权限、host 限制、端口连通 GRANT 授权;my.cnf 的 bind-address;telnet 3306 测试
服务启动失败 配置语法、端口冲突、目录权限 nginx -t / php-fpm -t;ss -tulpen 查占用;修正权限后重启

四 日志与关键文件速查

  • Nginx:错误日志**/var/log/nginx/error.log**;访问日志**/var/log/nginx/access.log**;主配置**/etc/nginx/nginx.conf**;站点配置**/etc/nginx/conf.d/*.conf**。
  • PHP-FPM:错误日志(常见)/var/log/php-fpm/error.log;主配置**/etc/php-fpm.conf**;进程池**/etc/php-fpm.d/www.conf**。
  • MariaDB/MySQL:错误日志(常见)/var/log/mysql/error.log;慢查询日志**/var/log/mysql/slow.log**;配置**/etc/my.cnf/etc/mysql/my.cnf**。
  • 系统与安全:系统日志**/var/log/messages、/var/log/syslog**;防火墙firewalld/iptables;SELinux 状态getenforce

五 一键排查命令清单

  • 服务与端口
    • systemctl status nginx php-fpm mariadb
    • ss -tulpen | grep -E ‘80|443|3306’
    • firewall-cmd --list-ports && firewall-cmd --list-services
  • 配置与语法
    • nginx -t
    • php-fpm -t
  • 日志与资源
    • tail -n50 /var/log/nginx/error.log /var/log/php-fpm/error.log /var/log/mysql/error.log
    • df -h && iostat -x 1 5 && top -b -d 1 -n 20
  • 连通与解析
    • ping 域名;nslookup/dig 域名;curl -Iv http://域名
  • 数据库
    • mysql -u root -p -e “SHOW VARIABLES LIKE ‘max_connections’; SHOW PROCESSLIST;”
  • 临时调试(仅测试环境)
    • 在 php.ini 设置display_errors = Onerror_reporting = E_ALL;生产环境建议使用php-fpm 的 slowlogerror_log定位。

0