温馨提示×

LNMP环境配置常见问题解答

小樊
47
2025-11-16 09:45:08
栏目: 编程语言

LNMP环境配置常见问题解答

一 快速排查流程

  • 明确症状:是访问不了502/504白屏、还是服务起不来,记录出现时间与复现路径。
  • 服务状态与语法:使用systemctl status nginx php-fpm mariadb查看状态;用nginx -tphp-fpm -t校验配置。
  • 资源与端口:用top/htop/vmstat/iostat看CPU/内存/IO;用**ss -tulpen | grep -E ‘(:80|:443|:9000)’**查端口占用与进程。
  • 日志定位:优先看**/var/log/nginx/error.log**、/var/log/php-fpm/error.log/var/log/mysql/error.log,必要时开启更详细的错误报告。
  • 连通与策略:测试内外网连通性;核对防火墙/安全组是否放行80/443/9000;如启用SELinux,核查是否拦截。
  • 修复与回滚:修改配置后reload/restart对应服务;保留变更记录,便于回滚与复盘。

二 高频问题对照表

症状 常见原因 快速修复
502 Bad Gateway fastcgi_pass指向错误;PHP-FPM进程不足或崩溃;权限/属主不匹配;SELinux/防火墙拦截 核对Nginx与PHP-FPM的地址:端口一致;在PHP-FPM pool中设置listen.owner/listen.group与Nginx一致;适当提升pm.max_children;检查SELinux/防火墙放行
Nginx无法启动/端口被占用 80/443被其他程序占用;配置语法错误;路径/包含文件错误 用**ss -tulpen
403 Forbidden 目录无索引且未开启autoindex;文件/目录权限或属主错误;SELinux策略限制 设置默认索引(如index index.php index.html);将文件/目录权限调为644/755,属主与Nginx/PHP-FPM运行用户一致;必要时调整SELinux布尔值
网站访问异常或白屏 PHP错误未显示;代码/扩展问题;连接数据库失败 在php.ini开启display_errors=Onerror_reporting=E_ALL并重启PHP-FPM;用php -m核对扩展;检查数据库主机/端口/账号/密码
数据库连接失败 MySQL未启动;主机/端口/用户/密码错误;远程访问未授权;连接数耗尽 systemctl status mariadbmysqladmin ping确认存活;核对连接串;为应用账号授予远程访问;必要时调大max_connections
伪静态/URL重写不生效 Nginx规则缺失或冲突;程序自带**.htaccess**与Nginx规则不一致 在Nginx中正确配置location ~ .php$try_files $uri $uri/ /index.php?$query_string;;如使用面板,按程序要求重新生成伪静态规则

三 配置要点与最佳实践

  • Nginx与PHP-FPM通信:常用TCP 127.0.0.1:9000Unix Socket。示例:
    • TCP:
      • Nginx:
        • fastcgi_pass 127.0.0.1:9000;
        • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        • include fastcgi_params;
      • PHP-FPM(pool):listen = 127.0.0.1:9000
    • Unix Socket(性能更好):
      • PHP-FPM:listen = /run/php/php-fpm.sock; listen.owner = nginx; listen.group = nginx; listen.mode = 0660
      • Nginx:fastcgi_pass unix:/run/php/php-fpm.sock;
  • PHP安全与性能:在php.ini中设置cgi.fix_pathinfo=0;按站点需要开启必要扩展(如mysqli/pdo_mysql/gd/mbstring);设置合适的memory_limitupload_max_filesizepost_max_size
  • 文件权限:网站根目录建议755,文件644;目录属主与Nginx/PHP-FPM运行用户保持一致(如nginx:nginxwww-data:www-data)。
  • 防火墙与SELinux:放行80/443(以及PHP-FPM监听端口/套接字所在目录);SELinux可用setsebool -P httpd_can_network_connect 1(按需)或临时setenforce 0排查。

四 日志位置与典型错误关键词

  • 日志路径与用途
    • Nginx/var/log/nginx/error.log(语法错误、端口占用、权限拒绝、上游不可用等)
    • PHP-FPM/var/log/php-fpm/error.log或按版本如**/var/log/php7.x-fpm.log**(进程崩溃、连接被拒、脚本错误等)
    • MySQL/MariaDB/var/log/mysql/error.log(启动失败、权限错误、崩溃恢复等),慢查询日志用于性能排查
  • 典型关键词
    • Nginx:bind() to 0.0.0.0:80 failed (98: Address already in use)permission deniedno such fileupstream prematurely closed connection while reading response header from upstream
    • PHP-FPM:connect() to 127.0.0.1:9000 failed (111: Connection refused)File not foundAllowed memory size exhausted
    • MySQL:Can’t connect to MySQL server on ‘localhost’ (111)Access denied for userInnoDB: Operating system error

五 性能与稳定性优化

  • PHP-FPM进程模型:根据内存与并发调pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers;高峰期可适当提高,避免OOM或进程饥饿。
  • 静态资源与缓存:开启gzip;对图片/CSS/JS使用浏览器缓存CDN;启用Nginx FastCGI缓存OPcache提升PHP执行效率。
  • 数据库:开启慢查询日志定位瓶颈;合理设置innodb_buffer_pool_size等关键参数;按需建立索引与优化SQL。
  • 连接与超时:在Nginx与PHP-FPM中设置合理的fastcgi_read_timeout/fastcgi_send_timeoutrequest_terminate_timeout,避免长请求拖垮进程池。

0