温馨提示×

Ubuntu LNMP常见问题有哪些

小樊
45
2025-11-26 14:00:26
栏目: 智能运维

Ubuntu LNMP常见问题与排查要点

一 服务无法启动或端口冲突

  • 典型表现:Nginx/MySQL/PHP-FPM 启动失败、端口被占用、配置语法错误。
  • 快速排查:
    • 查看服务状态:sudo systemctl status nginx mysql php7.4-fpm(按实际 PHP 版本调整)。
    • 检查配置语法:sudo nginx -t
    • 排查端口占用:sudo netstat -tulnp | grep ':80\|:9000'
    • 查看错误日志:sudo tail -f /var/log/nginx/error.log/var/log/php7.4-fpm.log/var/log/mysql/error.log
    • 修复后重启:sudo systemctl restart nginx php7.4-fpm

二 网站访问异常 白屏 502 504

  • 白屏或空白页:多为 PHP 错误未显示或日志未开启。
    • php.ini 中开启:display_errors = Offlog_errors = Onerror_log = /var/log/php_errors.log,重启 PHP-FPM 并查看日志。
  • 502 Bad Gateway:多为 PHP-FPM 未运行或 NginxPHP-FPM 通信方式不一致。
    • 确认 PHP-FPM 运行:sudo systemctl status php7.4-fpm
    • 统一通信方式:若 PHP-FPM 监听 unix:/run/php/php7.4-fpm.sock,则 Nginx 中应使用 fastcgi_pass unix:/run/php/php7.4-fpm.sock;,并确保 SCRIPT_FILENAME $document_root$fastcgi_script_name; 正确。
  • 504 Gateway Timeout:多为 PHP-FPM 处理慢或进程不足。
    • 调整 PHP-FPM 进程管理(如 pm.max_requests)与连接队列(如 listen.backlog),并优化慢请求。

三 数据库连接与权限问题

  • 无法连接 MySQL
    • 检查服务:sudo systemctl status mysql,查看错误日志:/var/log/mysql/error.log
    • 核对应用配置:主机、端口(默认 3306)、用户名、密码是否正确。
    • 检查防火墙:sudo ufw status,必要时放行:sudo ufw allow 'Nginx Full'(或放行 3306 的来源网段)。
  • 认证插件导致客户端连接失败:
    • 现象:客户端报 caching_sha2_password 无法加载。
    • 处理:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

四 文件权限与路径配置错误

  • 权限与属主:网站目录应可被 Nginx/PHP-FPM 访问,常见为 www-data:www-data,权限 755/644
  • 根目录与索引:确认 root 指向实际站点目录,且 index index.php index.html; 配置正确。
  • SCRIPT_FILENAME:必须指向真实文件路径,建议用 $document_root$fastcgi_script_name;,否则会出现空白页或 404。
  • 日志可写:确保 PHP 错误日志路径(如 /var/log/php_errors.log)可写。

五 环境与系统层面的坑

  • WSL 特有:
    • Windows 本机 MySQL 端口/套接字冲突,需关闭本机 MySQL 或改用不同端口。
    • 命令行中特殊字符(如 !)需转义,例如 mysql -u root -p 'password'
  • 资源与稳定性:
    • 监控磁盘与内存:df -hfree -mtop/htop,避免因磁盘满或内存不足导致异常。
    • 系统日志:dmesg/var/log/syslog 可帮助定位内核与系统级问题。
  • 版本差异:
    • PHP-FPM 监听地址与 Nginxfastcgi_pass 必须一致(socket127.0.0.1:9000 二选一),并注意 PHP 版本路径差异(如 /var/log/php7.4-fpm.log/var/log/php-fpm/error.log)。

0