LNMP中 Nginx 与 PHP 的协同机制
核心架构与角色
一次请求的完整流程
通信方式与关键配置
通信方式对比
| 方式 | 典型配置 | 适用场景 | 主要特点 |
|---|---|---|---|
| TCP Socket | php-fpm: listen = 127.0.0.1:9000;Nginx: fastcgi_pass 127.0.0.1:9000; |
同机或跨机部署 | 通用、可跨主机;经 loopback/TCP 栈,开销略大 |
| Unix Domain Socket | php-fpm: listen = /tmp/php-fpm.sock;Nginx: fastcgi_pass unix:/tmp/php-fpm.sock; |
仅同机部署 | 不经过网络栈,开销更小;需正确设置 socket 权限 |
关键 Nginx 配置要点
location ~ \.php$ 捕获 .php 请求,使用 fastcgi_pass 指定 PHP-FPM 地址。fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,否则 PHP-FPM 找不到脚本。fastcgi_param HTTPS on;(当反向代理或 TLS 终止在 Nginx 时)。最小可用示例
server {
listen 80;
server_name app.test;
root /code/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000; # 或 unix:/tmp/php-fpm.sock;
}
}
权限与安全(Unix Socket)
listen.owner = www; listen.group = www; listen.mode = 0660;进程模型与性能调优
fastcgi_connect/read/send_timeout)小于 PHP-FPM 脚本执行时间。