Nginx 本身不能直接执行 PHP,请求通常要转给 PHP-FPM,再通过 Fastcgi 完成协作。实际部署时,关键不在于“能不能通”,而在于该选 TCP 还是 unix socket:前者更适合跨机器通信,后者更常见于同机部署。下面按安装前提、两种配置方式和验证思路展开,保留完整配置路径、命令与示例,方便你直接对照上线环境处理。
安装前提与测试文件准备
Nginx 和 PHP 的组合,本质上是通过 Fastcgi 通信。常见的通信方式有两种:
TCPunix socket
如果 Nginx 和 PHP 部署在不同机器上,通常选择 TCP;如果部署在同一台机器上,则可以优先考虑 unix socket。而 PHP-FPM,就是 PHP 侧对 Fastcgi 的一种实现。
安装可先参考以下内容:
Nginx的安装:https://tech1024.com/original/3024PHP的安装:https://tech1024.com/original/2984
假设站点目录为 /wwwroot/example.com/,先创建一个最简单的测试文件 /wwwroot/example.com/public/index.php:
<?php
echo phpinfo();
这个文件的作用很直接:只要浏览器能正确显示 phpinfo() 页面,就说明 Nginx 已经成功把 PHP 请求交给了 PHP-FPM 处理。
TCP 方式如何配置
先检查 PHP-FPM 的站点配置文件 /usr/local/php/etc/php-fpm.d/www.conf,确认 listen 是否使用“IP + 端口”的形式:
listen = 127.0.0.1:9000
如果这里做过修改,需要重启 PHP-FPM 让配置生效:
service php-fpm restart
接着编辑 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf,在 http 节点内添加站点配置:
server {
listen 80;
server_name example.com;
root /wwwroot/example.com/public;
index index.html index.htm index.php;
location ~ .php$ {
# TCP,ip+端口的通信方式
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
这里最关键的是 fastcgi_pass 127.0.0.1:9000;。它表示 Nginx 会把匹配到的 PHP 请求转发给监听在 127.0.0.1:9000 的 PHP-FPM 进程。
配置完成后,重载 Nginx:
service nginx reload
如果没有报错,再把 host 绑定好,访问 http://example.com/,正常情况下就能看到 phpinfo 页面。
unix socket 方式如何配置
unix socket 是 *nix 系统里常用的一种进程间通信方式。它不是通过网络端口标识服务,而是通过一个文件来标识通信端点,常见后缀就是 .sock。只要 Nginx 和 PHP-FPM 都引用同一个 socket 文件,就可以建立通信。

先修改 PHP-FPM 的站点配置文件 /usr/local/php/etc/php-fpm.d/www.conf,重点是下面三个值:
listen = /tmp/php-cgi.sock
listen.owner = www
listen.group = www
其中:
listen = /tmp/php-cgi.sock表示 PHP-FPM 改为监听 socket 文件;listen.owner和listen.group用来设置这个 socket 文件的属主和属组,避免 Nginx 因权限问题无法访问。
修改完成后,重启 PHP-FPM:
service php-fpm restart
然后再修改 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf,同样是在 http 节点内添加或调整站点配置:
server {
listen 80;
server_name example.com;
root /wwwroot/example.com/public;
index index.html index.htm index.php;
location ~ .php$ {
# TCP,ip+端口的通信方式
# fastcgi_pass 127.0.0.1:9000;
# unix socket 方式
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
这里的核心变化是把 fastcgi_pass 从端口地址改成了 socket 文件:
fastcgi_pass unix:/tmp/php-cgi.sock;
配置完成后,同样重载 Nginx:
service nginx reload
如果没有报错,绑定好 host 后访问 http://example.com/,也应该可以看到 phpinfo 页面。
如何验证是否打通,以及常见排查点
无论你使用的是 TCP 还是 unix socket,验证结果都很明确:浏览器访问 http://example.com/ 后,只要能看到 phpinfo() 的输出页面,就说明 Nginx 与 PHP-FPM 已完成联动。
如果页面没有打开,排查时可以先按这几个方向看:
- 确认
PHP-FPM的listen配置与Nginx中的fastcgi_pass是否一致; - 确认修改配置后是否执行过
service php-fpm restart和service nginx reload; - 确认域名的
host是否已经正确绑定; - 如果是端口通信不通,可检查防火墙策略。
原始环境里还给出了一条直接处理方式:如果网络不通,可以尝试为防火墙添加端口,或者临时关闭防火墙:
service firewalld stop
不过在生产环境中,是否关闭防火墙需要结合实际安全策略判断。对大多数场景来说,核心选择逻辑并不复杂:跨机器部署用 TCP,同机部署优先考虑 unix socket,然后用一个最简单的 phpinfo() 页面完成联通性验证即可。














