位置:首页 > PHP > CentOS 上 PHP-FPM 与 Nginx 如何协同工作:安装、配置与验证一步讲清

CentOS 上 PHP-FPM 与 Nginx 如何协同工作:安装、配置与验证一步讲清

时间:2026-08-23  |  作者:游戏探长  |  阅读:0

目录

  1. 安装 Nginx 与 PHP-FPM
  2. 启动服务并设置开机自启
  3. 配置 PHP-FPM 监听与运行账户
  4. 配置 Nginx 转发 PHP 请求
  5. 用 phpinfo() 验证联通是否成功
  6. 别忽略防火墙放行

前言

在 CentOS 上跑 PHP 站点时,很多问题并不出在安装本身,而是卡在 Nginx 和 PHP-FPM 没有真正接通。本文按“安装服务、配置 socket、设置 Nginx 转发、浏览器验证、放行防火墙”的顺序整理出一套最小可用流程,同时把最常见的路径不一致、权限不匹配这两类问题单独讲清楚,方便你边操作边判断哪里出了错。

在 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。

展示 PHP-FPM 与 Nginx 关键配置项对应关系的白底对照信息图
Nginx 与 PHP-FPM 的关键配置对把最容易配错的权限、监听路径和转发参数拆成对应关系,便于排查 502 与权限问题。

文中这套配置使用 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 页面就无法被正常解析。

展示浏览器请求、Nginx、PHP-FPM 与 Unix Socket 之间关系的白底流程信息图
PHP 请求在 Nginx 与 PHP-FP用流程图把 PHP 请求从进入 Nginx 到交给 PHP-FPM。

为什么 user 和 group 要设为 nginx

如果 PHP-FPM 进程用户和 socket 所属权限与 Nginx 不匹配,常见结果就是 502 或权限错误。把 listen.ownerlisten.groupusergroup 都设置为 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 运行环境就算搭建完成了。后续无论部署小型站点还是继续接入数据库,这套结构都是常见起点。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多