在 CentOS 上部署 PHP 网站时,Nginx 和 PHP-FPM 的分工经常让人混淆:前者负责接收 HTTP 请求,后者才真正执行 PHP 脚本。下面按安装、服务配置、请求转发和结果验证几个环节展开,既保留可直接执行的命令,也把几个最容易出错的关键点说明白,便于你判断环境到底是“装好了”还是“真正能跑起来了”。
安装 Nginx 与 PHP-FPM
第一步先更新系统软件包,避免后续安装时因为依赖版本问题出错:
sudo yum update -y
然后安装 Nginx 和 PHP-FPM:
sudo yum install nginx php-fpm -y
这一步完成后,Web 服务和 PHP 解释服务都会被安装到系统中,但默认还不会自动对外提供完整的 PHP 页面处理能力,后面还需要把两者接起来。
启动服务并设置开机自启
安装完成后,先把 Nginx 和 PHP-FPM 启动起来,同时设置为开机自动运行:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
这样做的目的有两个:一是立刻让服务进入运行状态,二是避免服务器重启后站点不可用。
配置 PHP-FPM 监听与运行账户
PHP-FPM 的核心配置文件位于 /etc/php-fpm.d/www.conf。这里最重要的是监听地址以及 socket 文件的权限设置,因为 Nginx 后续就是通过它把 PHP 请求转给 PHP-FPM。

文中这套配置使用 Unix Socket,相关参数如下:
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
user = nginx
group = nginx
其中有两个关键判断点:
为什么要关注 listen 路径
listen = /run/php-fpm/www.sock 指定了 PHP-FPM 对外提供服务的 socket 文件位置。只要 Nginx 配置里的 fastcgi_pass 与这里不一致,PHP 页面就无法被正常解析。

为什么 user 和 group 要设为 nginx
如果 PHP-FPM 进程用户和 socket 所属权限与 Nginx 不匹配,常见结果就是 502 或权限错误。把 listen.owner、listen.group、user、group 都设置为 nginx,可以减少这一类问题。
配置 Nginx 转发 PHP 请求
接下来编辑默认站点配置,例如 /etc/nginx/conf.d/default.conf,让 Nginx 能识别 .php 请求并交给 PHP-FPM 处理:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这段配置里,真正决定 Nginx 与 PHP-FPM 如何协同的是 location ~ .php$ 这一段。
fastcgi_pass 要和 PHP-FPM 完全对应
fastcgi_pass unix:/run/php-fpm/www.sock; 必须与 /etc/php-fpm.d/www.conf 里的 listen 保持一致。一个写 socket、一个写别的路径,或者路径拼错,都会导致 PHP 请求转发失败。
SCRIPT_FILENAME 决定脚本实际位置
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 用来告诉 PHP-FPM 当前要执行的是哪个文件。这个参数缺失或配置错误时,访问 PHP 页面往往会出现空白页或执行失败。
重启服务让配置生效
配置文件修改完成后,需要重启 Nginx 和 PHP-FPM:
sudo systemctl restart nginx
sudo systemctl restart php-fpm
只有在服务重新加载新配置之后,前面修改的 socket、站点规则和进程权限才会正式生效。
用 phpinfo() 验证联通是否成功
最直接的验证方法,是在站点根目录 /usr/share/nginx/html 下创建一个测试文件 info.php:
随后在浏览器访问:
http://your_server_ip/info.php
如果页面能够正常显示 PHP 信息,说明当前链路已经打通:浏览器请求先到 Nginx,再由 Nginx 把 PHP 文件交给 PHP-FPM 执行,最后把结果返回给客户端。
别忽略防火墙放行
如果系统启用了防火墙,还需要放行 HTTP 和 HTTPS 服务,否则即使 Nginx 正常运行,外部也可能无法访问:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
执行完成后,80 和 443 端口对应的服务规则会被写入防火墙配置,重载后立即生效。
Nginx 与 PHP-FPM 的协同逻辑可以这样理解
整套流程的本质并不复杂:Nginx 负责接收浏览器发来的请求,遇到静态文件就直接返回,遇到 .php 请求则按 fastcgi_pass 指定的方式交给 PHP-FPM。PHP-FPM 执行脚本后,把结果再交回 Nginx,由 Nginx 返回给用户。
如果你已经完成了安装、服务启动、socket 权限、Nginx 转发和浏览器测试这几个环节,CentOS 上的基础 PHP 运行环境就算搭建完成了。后续无论部署小型站点还是继续接入数据库,这套结构都是常见起点。







