温馨提示×

centos lnmp如何进行调试

小樊
41
2026-01-10 22:04:23
栏目: 智能运维

CentOS 上 LNMP 调试流程与要点

一、快速定位流程

  • 服务状态与语法
    • 查看并验证:systemctl status nginxnginx -tsystemctl status php-fpmphp-fpm -tsystemctl status mysqld。任何配置变更后先语法检查再重启。
  • 日志优先
    • 关键日志:/var/log/nginx/error.log/var/log/php-fpm/error.log/var/log/mysqld.log。使用 tail -f 实时观察错误关键字(如 Permission denied、No input file specified、Connection refused)。
  • 网络与端口
    • 本机可达:ping 服务器IP;端口监听:ss -tulpen | grep -E ‘(:80|:443|:9000|:3306)’;远端连通:curl -I http://服务器IPtelnet 服务器IP 80
  • 防火墙与云安全组
    • firewall-cmd --list-ports;放行端口示例:firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --reload。如使用云服务器,同步检查安全组规则是否放行 80/443/9000/3306
  • 资源与权限
    • 资源:topfree -mdf -h;权限与属主:网站目录常见为 nginx:nginxwww-data:www-data,确保 Nginx/PHP-FPM 运行用户对目录有读/执行权限。

二、Nginx 与 PHP-FPM 联动排查

  • 典型症状与处理
    • 访问 .php 文件被下载:未走 FastCGI。确认 location ~ .php$ 存在且包含:fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;;重启 nginx/php-fpm 后再测。
    • 502/504 错误:多为 PHP-FPM 未启动/崩溃/监听地址不匹配/超时。检查 php-fpm 状态与日志;确认 listen=127.0.0.1:9000 与 Nginx 的 fastcgi_pass 一致;必要时调大 fastcgi_read_timeout
    • 403 Forbidden:目录无索引或权限不足。检查 root 路径、index 指令、目录权限与 SELinux(见下一节)。
    • 配置变更不生效:执行 nginx -t 通过后 systemctl reload nginx;PHP 配置变更后 systemctl reload php-fpm

三、MySQL 与远程连接排查

  • 本地无法登录
    • 查看状态与日志:systemctl status mysqldtail -f /var/log/mysqld.log。若提示策略限制,可临时降低密码策略(如 set global validate_password_policy=0; set global validate_password_length=4;)后重置密码。
  • 远程连接失败
    • 确认服务监听:ss -lntp | grep 3306;若仅 127.0.0.1:3306,需调整 MySQL 配置以监听外部地址并重启。
    • 防火墙/云安全组:放行 3306/tcp;云上实例需同时配置安全组入站规则。
    • 用户权限:确保存在允许远程的主机记录(如 ‘root’@‘%’)并授予权限;修改后执行 FLUSH PRIVILEGES;

四、常见陷阱与修复建议

  • SELinux 拦截
    • 查看状态:sestatus;临时测试可 setenforce 0(仅测试)。生产环境建议用 setsebool 或策略模块放行 httpd/php-fpm 相关访问,而非长期关闭。
  • 防跨目录限制(使用 LNMP 一键包时常见)
    • 网站根目录的 .user.ini 可能限制 open_basedir。修改/删除前先 chattr -i .user.ini,调整后 chattr +i .user.ini;或调整 fastcgi_param PHP_ADMIN_VALUE “open_basedir=…” 并重启 nginx。框架(如 Laravel/ThinkPHP)将站点根指向 public 时,需把 open_basedir 包含项目根目录(不止 public)。
  • 端口与协议混淆
    • 3306TCP 端口;若误用 UDP 检测会失败。使用 ss/telnet/curl 时明确协议类型。
  • 资源与连接数
    • 高并发下检查 ulimit -nworker_processes/worker_connections(Nginx)、pm.max_children(PHP-FPM)、数据库最大连接数;配合 top/free/df 排除资源瓶颈。

五、一键最小化调试清单

  • 验证 Nginx 与 PHP
    • /usr/share/nginx/html/index.php 写入 ;访问 http://服务器IP/index.php 应显示 PHP 信息页。若仍“下载文件”,回到第二节检查 FastCGI 配置与端口。
  • 验证数据库
    • 本地执行 mysql -u root -p 登录;创建测试库/表并写入数据,确认应用侧连接参数正确。
  • 复核安全策略
    • 再次确认 firewall-cmd 已放行 80/443/9000/3306,云安全组策略同步生效;必要时抓包或增加应用日志以闭环定位。

0