PHP在Nginx上运行需通过FastCGI协议协同:Nginx路由请求,PHP-FPM执行脚本;须确保服务运行、socket路径与权限一致、Nginx正确转发PHP请求,并通过phpinfo()验证。

要让PHP在Nginx上真正跑起来,关键不是装两个软件,而是让它们“说同一种话”——FastCGI协议。Nginx不解析PHP,只做高效路由;PHP-FPM不处理HTTP,只专注执行脚本。两者配合得当,静态资源快、动态请求稳、并发扛得住。
确认基础服务已就位
先确保Nginx和PHP-FPM都已安装并处于运行状态:
- 执行
sudo systemctl status nginx,看到 active (running) 表示Nginx正常 - 执行
sudo systemctl status php*-fpm(如php8.2-fpm),确认PHP-FPM进程池已启动 - 若服务未运行,用
sudo systemctl start nginx和sudo systemctl start php8.2-fpm启动,并设为开机自启:sudo systemctl enable nginx php8.2-fpm
对齐通信方式与权限
Unix socket是本地通信的首选,比TCP更轻量、更安全。但路径和权限必须严格一致:
- 打开
/etc/php/8.2/fpm/pool.d/www.conf,检查三行配置: -
listen = /run/php/php8.2-fpm.sock(路径需与Nginx中fastcgi_pass完全一致) -
listen.owner = www-data和listen.group = www-data(确保与Nginx运行用户相同,Ubuntu/Debian默认是www-data,CentOS/RHEL多为nginx) - 改完保存,执行
sudo systemctl reload php8.2-fpm
配置Nginx转发PHP请求
在站点配置文件(如 /etc/nginx/sites-available/default 或项目专属配置)的 server 块内添加或修改以下内容:
立即学习“PHP免费学习笔记(深入)”;
- 确保
root指向你的项目目录,例如:root /var/www/myapp; - 在
location /块后加入PHP处理规则: location ~ \.php$ {-
include snippets/fastcgi-php.conf; -
fastcgi_pass unix:/run/php/php8.2-fpm.sock; -
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }- 别忘了让首页支持PHP:
index index.php index.html; - 语法检查并重载:
sudo nginx -t && sudo systemctl reload nginx
验证与排障要点
创建一个测试文件快速验证是否通路:
- 在网站根目录下新建
info.php,内容为:<?php phpinfo(); ?> - 浏览器访问
http://your-server-ip/info.php,应显示PHP信息页 - 若出现502错误:优先查PHP-FPM是否运行、socket路径是否拼错、权限是否匹配(
ls -l /run/php/看属主) - 若页面空白或404:检查Nginx
root路径是否正确、SCRIPT_FILENAME是否拼写无误、文件是否真在该目录下 - 始终看日志:
sudo tail -f /var/log/nginx/error.log和sudo journalctl -u php8.2-fpm -f



















