lnmp在centos的故障排查
导读:LNMP在CentOS中的故障排查指南 LNMP(Linux+Nginx+MySQL/MariaDB+PHP)是CentOS上常见的网站架构,故障排查需遵循从现象到根源的系统化流程,覆盖服务状态、配置文件、权限、网络等核心维度。 一、故障排...
LNMP在CentOS中的故障排查指南
LNMP(Linux+Nginx+MySQL/MariaDB+PHP)是CentOS上常见的网站架构,故障排查需遵循从现象到根源的系统化流程,覆盖服务状态、配置文件、权限、网络等核心维度。
一、故障排查基础流程
- 确认故障现象
明确具体问题(如网站无法访问、502错误、数据库连接失败、服务无法启动等),收集用户反馈或监控告警信息,缩小排查范围。 - 检查系统资源
使用top(查看CPU/内存占用)、free -h(查看内存/交换分区使用)、df -h(查看磁盘空间)命令,确认系统资源是否充足(如磁盘空间不足可能导致服务崩溃)。 - 查看服务状态
使用systemctl status nginx、systemctl status mysqld(或mariadb)、systemctl status php-fpm命令,检查各组件是否处于active (running)状态。若服务未启动,尝试systemctl restart 服务名并观察重启是否成功。 - 分析日志文件
日志是故障定位的关键,CentOS下LNMP相关日志路径如下:- Nginx错误日志:
/var/log/nginx/error.log(记录Nginx启动、请求处理错误); - PHP-FPM错误日志:
/var/log/php-fpm/error.log(记录PHP脚本执行错误、FPM进程问题); - MySQL错误日志:
/var/log/mysqld.log(或/var/log/mysql/error.log,记录数据库启动、查询错误)。
通过tail -f 日志文件实时查看最新错误信息,快速定位问题根源。
- Nginx错误日志:
二、常见故障及解决方法
1. Nginx无法启动
- 原因:配置文件语法错误、端口被占用、依赖缺失。
- 解决方法:
- 使用
nginx -t命令检查配置文件语法(如/etc/nginx/nginx.conf及包含的server块配置),根据提示修复错误; - 使用
netstat -tulnp | grep 80(或ss -tulnp | grep 80)检查80端口是否被其他进程占用(如Apache),停止冲突进程后再启动Nginx; - 确保安装了Nginx依赖(如
gcc-c++、pcre-devel、zlib-devel),可通过yum install gcc-c++ pcre-devel zlib-devel -y安装。
- 使用
2. PHP-FPM无法启动
- 原因:配置文件语法错误、端口冲突、权限不足。
- 解决方法:
- 使用
php-fpm -t命令检查配置文件语法(如/etc/php-fpm.conf或/etc/php/7.x/fpm/php-fpm.conf),修复错误; - 检查PHP-FPM监听端口(如
listen = 127.0.0.1:9000)是否与其他服务冲突,修改端口或停止冲突服务; - 确保PHP-FPM进程用户(如
user = nginx)有权限访问网站目录(如/usr/share/nginx/html),使用chown -R nginx:nginx /usr/share/nginx/html修改权限。
- 使用
3. 网站无法访问
- 原因:Nginx未运行、防火墙拦截、域名解析错误、PHP-FPM连接失败。
- 解决方法:
- 使用
systemctl status nginx确认Nginx是否运行,未运行则启动; - 使用
firewall-cmd --list-all检查防火墙是否开放80/443端口,未开放则执行firewall-cmd --add-service=http --permanent、firewall-cmd --add-service=https --permanent、firewall-cmd --reload; - 使用
nslookup 域名确认域名是否解析到服务器公网IP; - 检查Nginx配置文件中
fastcgi_pass指令是否指向正确的PHP-FPM地址(如127.0.0.1:9000),修改后重启Nginx。
- 使用
4. 502 Bad Gateway错误
- 原因:Nginx无法连接到PHP-FPM进程(最常见)、PHP-FPM未运行、
fastcgi_pass地址错误。 - 解决方法:
- 检查PHP-FPM服务状态(
systemctl status php-fpm),未运行则启动; - 确认Nginx配置文件中的
fastcgi_pass指令与PHP-FPM监听地址一致(如listen = 127.0.0.1:9000对应fastcgi_pass 127.0.0.1:9000); - 检查SELinux是否拦截(
getenforce显示Enforcing时),临时关闭SELinux(setenforce 0)测试是否解决问题,若解决则修改/etc/selinux/config将SELINUX=enforcing改为SELINUX=permissive。
- 检查PHP-FPM服务状态(
5. MySQL无法启动
- 原因:配置文件错误、数据目录权限问题、端口冲突、磁盘空间不足。
- 解决方法:
- 使用
mysqld --validate-config(或mysql --help)检查配置文件语法(如/etc/my.cnf或/etc/mysql/my.cnf),修复错误; - 检查MySQL数据目录(如
/var/lib/mysql)权限,确保mysql用户拥有所有权(chown -R mysql:mysql /var/lib/mysql); - 使用
netstat -tulnp | grep 3306检查3306端口是否被占用,停止冲突进程; - 使用
df -h检查磁盘空间,清理无用文件释放空间。
- 使用
6. 权限问题(如403 Forbidden)
- 原因:网站目录权限过严、SELinux策略限制。
- 解决方法:
- 使用
ls -l /path/to/website检查目录权限,确保Nginx用户(如nginx)有读取权限(chmod -R 755 /path/to/website); - 若启用SELinux,使用
setsebool -P httpd_can_network_connect 1允许Nginx访问网络,或chcon -R -t httpd_sys_content_t /path/to/website修改目录安全上下文。
- 使用
三、预防性维护建议
- 定期备份:使用
tar或rsync备份网站数据、数据库(mysqldump),避免数据丢失; - 监控系统:使用
Zabbix、Prometheus等工具监控服务器资源(CPU、内存、磁盘),及时预警异常; - 更新组件:定期使用
yum update更新Nginx、MySQL、PHP及相关依赖,修补安全漏洞; - 日志轮转:配置
logrotate(默认已启用)管理日志文件大小,避免日志占满磁盘(如/etc/logrotate.d/nginx)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: lnmp在centos的故障排查
本文地址: https://pptw.com/jishu/743944.html
