nginx需通过fastcgi将.php请求转发给php-fpm处理,核心是确保fastcgi_pass地址与php-fpm监听地址严格一致、用户组权限对齐、script_filename使用$realpath_root、opcache启用,并验证phpinfo()中版本为8.5.7且配置文件路径正确。

Nginx 本身不解析 PHP,必须通过 FastCGI 协议把 .php 请求转发给 PHP-FPM 处理。PHP 8.5.7 是当前稳定维护版本(2026 年中最新小版本),配置逻辑与 8.5.x 系列一致,重点在于路径匹配、socket 地址、权限对齐和关键参数校准。
✅ 确认 PHP-FPM 已安装并监听正确地址
PHP 8.5.7 安装后,FPM 默认配置文件位于:
- Ubuntu/Debian:
/etc/php/8.5/fpm/pool.d/www.conf - CentOS/RHEL:
/etc/php-fpm.d/www.conf
运行命令检查监听方式:
sudo grep "^listen" /etc/php/8.5/fpm/pool.d/www.conf
常见输出:
listen = /run/php/php8.5-fpm.sock listen.owner = www-data listen.group = www-data user = www-data group = www-data
⚠️ 注意:Ubuntu 系统用户组是
www-data,CentOS/RHEL 默认是nginx或apache,需保持 Nginx worker 进程用户与listen.owner/group一致,否则会报Permission denied。
✅ 配置 Nginx 虚拟主机(推荐 /etc/nginx/sites-available/your-site)
server {
listen 80;
server_name example.com;
# 项目根目录(注意:框架如 Laravel 应指向 public/)
root /var/www/example.com/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 关键:PHP 处理块(不能只抄模板!)
location ~ \.php$ {
include snippets/fastcgi-php.conf; # Ubuntu 自带(含 fastcgi_param SCRIPT_FILENAME)
fastcgi_pass unix:/run/php/php8.5-fpm.sock; # 必须与 php-fpm 的 listen 值完全一致
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
# 禁止访问敏感文件
location ~ /\.(env|log|htaccess|git) {
deny all;
}
}
? 关键细节说明:
-
fastcgi_pass地址必须和php-fpm的listen值一字不差(包括路径、sock 文件名、是否带unix:前缀); -
SCRIPT_FILENAME推荐用$realpath_root(需 Nginx ≥1.19.0),比$document_root更可靠,尤其在用了alias或符号链接时; -
snippets/fastcgi-php.conf在 Ubuntu 中已预置,若不存在可手动创建,内容只需两行:fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params;
启用站点(Ubuntu):
sudo ln -sf /etc/nginx/sites-available/your-site /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
✅ 调整 PHP-FPM 进程管理(适配服务器内存)
编辑 /etc/php/8.5/fpm/pool.d/www.conf:
pm = dynamic pm.max_children = 40 # 4GB 内存建议值(每个进程约 100–130MB) pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pm.max_requests = 500 # 防止内存泄漏,建议设为 300–1000
重启服务:
sudo systemctl restart php8.5-fpm sudo systemctl restart nginx
✅ 启用 OPcache(必开,PHP 8.5.7 默认启用但需确认)
检查 /etc/php/8.5/fpm/php.ini 是否有:
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 opcache.fast_shutdown=1
修改后需重启 php8.5-fpm 生效。
✅ 验证部署是否成功
在网站根目录(如 /var/www/example.com/public)新建 info.php:
<?php phpinfo();
访问 http://example.com/info.php,确认:
- 显示 PHP 版本为
8.5.7; - “Loaded Configuration File” 指向
/etc/php/8.5/fpm/php.ini; - “Registered PHP Streams” 包含
https, ftp, phar等; - OPcache 行显示 “Enabled”。
如遇 502 Bad Gateway:优先查 sudo journalctl -u php8.5-fpm -n 30 和 sudo nginx -t;
如遇 404 或直接下载 .php 文件:说明 Nginx 未将请求转发给 PHP-FPM,重点核对 location ~ \.php$ 块和 fastcgi_pass 地址。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











