Ubuntu LNMP常见冲突与解决方案
一、快速定位冲突
sudo systemctl status nginx、sudo systemctl start nginx、sudo systemctl enable nginx(对 mysql/php-fpm 同理)。sudo nginx -t;PHP-FPM 可通过 sudo systemctl status php7.x-fpm 的报错定位;MySQL 主要核对 /etc/mysql/my.cnf 等配置。sudo netstat -tulnp | grep ':80\|:443\|:3306',快速发现端口被占用导致的冲突。sudo ufw status,必要时放行 80/443/3306。二、常见冲突场景与处理
| 冲突场景 | 典型表现 | 快速处理 |
|---|---|---|
| 端口冲突(80/443/3306) | 服务起不来或端口被占用 | 用 netstat 找到占用进程并停止/更换端口;Nginx 可在 /etc/nginx/sites-available/* 的 listen 改为 8080/8443;重启服务;必要时 sudo ufw allow 8080,8443/tcp。 |
| Nginx 与 PHP-FPM 通信失败 | 访问 PHP 页面空白或 502/504 | 核对 Nginx fastcgi_pass 与 PHP-FPM 监听一致:常见为 unix:/run/php/php7.x-fpm.sock 或 127.0.0.1:9000;确保 PHP-FPM 池监听用户与 Nginx worker 用户匹配;修改后 sudo nginx -t && sudo systemctl reload nginx && sudo systemctl restart php7.x-fpm。 |
| 伪静态/重写规则冲突 | 路由 404、重定向循环 | 检查站点配置中 try_files 与 rewrite 逻辑;如使用面板,先备份并清理冲突的伪静态规则,再按程序(如 WordPress、Laravel)官方示例重新配置。 |
| 配置文件覆盖/重复 | 修改不生效或启动报错 | 使用 nginx -t 定位包含/重复配置;删除或禁用重复站点配置(如 /etc/nginx/sites-enabled/ 下的冗余文件);合并变更而非盲目覆盖。 |
| 数据库连接失败 | 应用报 Access denied/Can’t connect | 核对 主机、端口、用户名、密码;确认 MySQL 监听 127.0.0.1 或 socket 与应用一致;如远程连接,放行 3306/tcp 并考虑 bind-address;执行 sudo mysql_secure_installation 完善权限。 |
| 防火墙/安全组阻断 | 外部访问超时或端口不通 | sudo ufw allow 'Nginx Full'(放行 80/443),数据库仅在需要时放行 3306;云服务器同步检查安全组规则。 |
| 资源/权限问题 | 502、日志写入失败、只读文件系统 | 检查磁盘空间 df -h、系统日志 dmesg//var/log/syslog;确认网站目录与日志目录属主为 www-data(或相应运行用户),必要时 chown/chmod;若进入只读模式,先恢复读写再排查。 |
| 多 PHP 版本共存冲突 | 站点跑错 PHP 版本 | 为每个站点在 Nginx 中显式指定对应的 php-fpm.sock(如 php7.4/8.1/8.3);使用 update-alternatives 管理 CLI 默认版本,避免 CLI 与 FPM 不一致。 |
以上场景与处理要点可覆盖端口、通信、规则、配置、数据库、网络与权限等高频冲突。
三、标准修复流程
sudo nginx -t 校验并 reload/restart 相关服务。四、一键安装包与容器化环境的差异
apt 管理的包产生混用冲突。docker ps、docker logs 与 docker-compose.yml 的 ports/volumes/user 配置调整,必要时映射为 8080:80 等避免冲突。