在LNMP环境搭建中,Nginx和PHP-FPM的通信方式通常有两种,一种是TCP网络端口通信,另一种就是Unix Socket通信。相比TCP方式,Unix Socket通过本地文件系统实现进程间通信,不需要经过网络协议栈,性能更优,也不会占用额外的网络端口,是生产环境中更推荐的选择。接下来将一步步讲解如何把PHP-FPM的监听方式修改为sock文件,并配置Nginx使用对应的Unix Socket连接PHP-FPM。

一、修改PHP-FPM的listen配置为sock文件
首先我们需要找到PHP-FPM的配置文件,不同系统的配置文件路径可能略有差异,常见的路径有/etc/php-fpm.d/www.conf或者/usr/local/php/etc/php-fpm.d/www.conf,我们可以通过以下命令查找对应的配置文件:
find / -name www.conf 2>/dev/null | grep php-fpm
打开找到的www.conf配置文件,找到listen配置项,默认情况下它可能是监听TCP端口,比如listen = 127.0.0.1:9000,我们需要把它修改为sock文件的路径,示例配置如下:
listen = /run/php-fpm/php-fpm.sock ; 以下两项配置建议同时设置,避免权限问题 listen.owner = nginx listen.group = nginx listen.mode = 0660
修改完成后保存配置文件,重启PHP-FPM服务让配置生效,不同系统的重启命令如下:
systemctl restart php-fpm # 如果是源码安装的话可能使用以下命令 /etc/init.d/php-fpm restart
二、配置Nginx使用Unix Socket连接PHP-FPM
接下来需要修改Nginx的站点配置,找到处理PHP请求的location块,默认的配置可能是使用TCP端口连接PHP-FPM,类似下面的内容:
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}我们需要把fastcgi_pass的值修改为刚才PHP-FPM配置的sock文件路径,修改后的配置如下:
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}修改完成后保存Nginx配置文件,先测试配置是否有语法错误,再重启Nginx服务:
nginx -t systemctl restart nginx
三、权限问题排查与验证
完成上述配置后,我们可以创建一个测试PHP文件来验证配置是否生效,在Nginx的站点根目录下创建info.php文件,内容如下:
<?php phpinfo(); ?>
如果访问测试文件时出现502错误,大概率是sock文件的权限问题,我们可以通过以下命令查看sock文件的权限和所属用户:
ls -l /run/php-fpm/php-fpm.sock
确保Nginx的运行用户(通常是nginx或者www-data)对sock文件有读写权限,如果权限不足,可以回到PHP-FPM的www.conf配置中调整listen.owner、listen.group和listen.mode的值,重新重启PHP-FPM和Nginx即可。
如果访问页面能正常显示PHP信息,说明Nginx已经成功通过Unix Socket连接到了PHP-FPM,配置完成。
NginxPHP-FPMUnix_Socketlisten配置修改时间:2026-06-26 13:18:14