LNMP 是 Linux + Nginx + MySQL + PHP-FPM 的经典 Web 服务架构,是国内 PHP 业务最常用的部署方案。很多初学者容易混淆 Nginx、PHP-FPM 的角色,误以为 Nginx 可以直接解析 PHP 代码,这是理解整个架构最大的误区。
Nginx 本身是静态 Web 服务器,只能处理 html、css、js、图片这类静态文件,**不具备 PHP 代码执行能力**。当用户浏览器请求一个 index.php 文件时,请求流程如下:
- 用户发起 HTTP 请求,数据包到达服务器 80 端口,由 Nginx 监听接收;
- Nginx 判断后缀为 .php,匹配站点配置中的 fastcgi 规则,不会直接返回文件;
- Nginx 通过 Unix Socket 或者 TCP 连接,把请求参数、POST 数据、请求头转发给 PHP-FPM;
- PHP-FPM 的主进程管理多个 Worker 子进程,挑选空闲子进程解析并执行 PHP 源码;
- PHP 代码执行过程中如果需要读写数据库,会连接 MySQL,查询或写入数据;
- PHP 脚本执行完成,把生成的 HTML 文本返回给 Nginx;
- Nginx 将最终 HTML 内容封装为 HTTP 响应,传回浏览器。
PHP-FPM 是 PHP 的 FastCGI 进程管理器,负责维护进程池,避免每次请求都重新创建 PHP 进程带来巨大开销。Socket 通信分为两种:Unix 域套接字,速度更快,适合单机;TCP 方式支持 Nginx 和 PHP 分离部署,适合分布式场景。
理解这套链路,是排查 502 Bad Gateway、504 超时、请求卡死等 LNMP 常见故障的基础。502 大多代表 Nginx 无法连接 PHP-FPM;504 一般是 PHP 脚本执行超时没有返回结果。