LNMP常见故障与排查步骤
一、快速定位流程
systemctl status nginx;配置语法:nginx -tsystemctl status php-fpm;配置语法:php-fpm -tsystemctl status mysqld;配置检查:mysqld --validate-config/var/log/nginx/error.log、/var/log/nginx/access.log/var/log/php-fpm.log、/var/log/php-fpm/www-error.log/var/log/mysqld.logsystemctl reload 服务名 或 systemctl restart 服务名。二、高频故障与处理清单
| 症状 | 常见原因 | 快速修复 |
|---|---|---|
| 502 Bad Gateway | PHP-FPM未运行;Nginx与PHP-FPM的监听地址/端口不一致;进程数不足;权限/SELinux拦截 | 1) systemctl status/start php-fpm 2) 对齐 fastcgi_pass 与 listen(如 127.0.0.1:9000 或 unix:/var/run/php-fpm/php-fpm.sock)3) 调整 pm.max_children 等进程参数 4) 统一Nginx与PHP-FPM运行用户,目录权限设为755/644 5) 开放防火墙/SELinux策略 |
| 403 Forbidden | 目录无索引文件且未开启目录浏览;Nginx用户无权访问;SELinux策略限制 | 1) 配置 index index.php index.html; 2) 目录属主与Nginx/PHP-FPM用户一致(如 www-data:www-data)3) 权限755/644 4) 临时 setenforce 0 验证,必要时调整SELinux布尔值 |
| 500 Internal Server Error | PHP代码语法/逻辑错误;PHP-FPM配置错误;文件/目录权限不当 | 1) 查 php-fpm 与 Web 错误日志 2) 开发环境临时开启 display_errors 与 error_reporting(E_ALL) 3) 修正代码与配置并重载服务 |
| Nginx/PHP-FPM无法启动 | 配置语法错误;端口冲突(如80/443/9000);依赖缺失;数据目录权限错误 | 1) nginx -t / php-fpm -t 2) `netstat -tulpen |
| 网站无法访问 | Nginx未启动;域名未解析到服务器IP;防火墙/安全组未放行 | 1) systemctl start nginx 2) nslookup/ping 验证解析 3) firewall-cmd --list-all 检查并放行 http/https |
| 数据库连接失败 | MySQL未启动;账号/密码错误;用户Host限制;远程访问未放行 | 1) systemctl start mysqld 2) 校验连接参数 3) SELECT User,Host FROM mysql.user; 调整Host为%或localhost并授权 4) 需远程时注释 bind-address=127.0.0.1 并重启 |
三、配置与权限要点
/etc/nginx/nginx.conf 中 user)与 PHP-FPM(/etc/php-fpm.d/www.conf 中 user/group)保持一致(如 www-data 或 nginx),避免403/502。www-data:www-data,权限目录755、文件644;避免使用777。fastcgi_pass 与 PHP-FPM listen 必须一致;常见为 127.0.0.1:9000 或 unix:/var/run/php-fpm/php-fpm.sock。firewall-cmd --permanent --zone=public --add-service=httpfirewall-cmd --permanent --zone=public --add-service=httpsfirewall-cmd --reloadsetenforce 0):
setsebool -P httpd_can_network_connect 1setsebool -P httpd_can_network_connect_db 1systemctl reload 服务名 或 systemctl restart 服务名。四、性能优化与稳定性
pm = dynamic;示例参数(按内存调优):pm.max_children=50、pm.start_servers=10、pm.min_spare_servers=5、pm.max_spare_servers=20。opcache.enable=1、opcache.memory_consumption=128、opcache.interned_strings_buffer=8。innodb_buffer_pool_size 建议为物理内存的50%–75%(如 1GB 内存可设 512M)。innodb_log_file_size=256M、innodb_log_buffer_size=16M;慢查询日志定位需优化SQL。worker_processes auto、worker_connections 1024、keepalive_timeout 65。gzip on; gzip_types text/plain text/css application/javascript application/json text/xml; gzip_comp_level 2; gzip_vary on;。五、常用命令与日志路径速查
systemctl status|start|restart|reload nginx php-fpm mysqldnginx -t、php-fpm -t、mysqld --validate-confignetstat -tulpen | grep -E '80|443|9000|3306'ss -lntp | grep -E '80|443|9000|3306'/var/log/nginx/error.log、/var/log/nginx/access.log/var/log/php-fpm.log、/var/log/php-fpm/www-error.log/var/log/mysqld.logfirewall-cmd --list-all、firewall-cmd --permanent --add-service=http --permanent --add-service=https && firewall-cmd --reloadgetenforce、setenforce 0(测试)、setsebool -P httpd_can_network_connect 1