发布于2026-07-10 阅读(0)
扫一扫,手机访问
在Linux上配置PHP-FPM,其实是搭建高性能Web服务时绕不开的一步。很多朋友刚开始接触时,会觉得配置文件又多又杂,其实拆开来看,无非就是安装、调参、启动、然后让Web服务器跟它握手。整个过程并不复杂,但几个关键细节如果没留意,后面排查问题会很头疼。下面就把整个流程从头到尾捋一遍。

不同发行版用对应的包管理器安装就行。Debian/Ubuntu系执行:
sudo apt update
sudo apt install php-fpm
CentOS/RHEL系则用:
sudo yum install php-fpm
装完后,系统会自动创建对应的服务单元和默认配置。可以先用 php -v 确认版本,后续配置路径会用到这个版本号。
配置文件放在 /etc/php/{version}/fpm/ 下面({version} 替换为实际版本号,比如 8.1)。这里面有几个关键文件需要了解。
php-fpm.conf:全局主配置,控制进程管理、日志等。www.conf:与Web服务器通信的池配置,默认就有一个叫 www 的池。通常改得最多的就是 www.conf,不过我们先看主配置里几个影响性能的参数。
php-fpm.conf进程管理方式(pm)一般用 dynamic,系统会根据请求量动态调整子进程数量。下面是几个重要的数值:
pm = dynamic
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.start_servers = 5
pm.max_children = 50
pm.max_requests = 500
这些值要根据服务器内存和业务负载来调。比如 max_children 设得太大,内存容易爆;设太小,高峰期又不够用。经验做法是先跑一段压测,再根据 pm.max_requests 和实际内存占用调整。
www.conf池配置里最关键的是通信方式——用Unix socket还是TCP端口。生产环境推荐用socket,性能更高。默认的监听地址和权限记得确认:
listen = /run/php/php{version}-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = www-data
group = www-data
注意 listen.owner 和 listen.group 要跟Web服务器运行的用户一致(比如Nginx通常是 www-data 或 nginx),否则握手会失败。
配置好了,启动服务并设置开机自启:
Debian/Ubuntu:
sudo systemctl start php{version}-fpm
sudo systemctl enable php{version}-fpm
CentOS/RHEL:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
启动后可以用 systemctl status php-fpm 查看状态,或者 ss -ln | grep php 检查socket文件是否已创建。
这一步是让Nginx或Apache把PHP请求转给PHP-FPM处理。两种常见服务器的配置方式不太一样。
在server块里加一个处理 .php 文件的location:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{version}-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这里 fastcgi_pass 的路径必须和 www.conf 里 listen 保持一致。如果用的是TCP端口,就改成 127.0.0.1:9000 这样的格式。
Apache需要启用 mod_proxy_fcgi,然后在虚拟主机里通过 SetHandler 指定:
ServerName example.com
DocumentRoot /var/www/html
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
SetHandler "proxy:fcgi://unix:/run/php/php{version}-fpm.sock"
注意Apache下 proxy:fcgi:// 后面如果用的是socket,路径前面不需要 unix: 前缀?实际上Apache的mod_proxy_fcgi对Unix socket的语法是 unix:/path/to/sock|fcgi://localhost。上面示例写法其实更接近Nginx的风格,正确的Apache语法应该是:
SetHandler "proxy:fcgi://unix:/run/php/php{version}-fpm.sock|fcgi://localhost"
这个细节容易踩坑,务必根据自家Apache版本查一下文档。
所有配置改完后,记得重启Web服务器使改动生效:
Debian/Ubuntu(Nginx):
sudo systemctl restart nginx
CentOS/RHEL(Apache):
sudo systemctl restart httpd
重启后可以写一个简单的 phpinfo() 文件测试,看看页面是否正常显示PHP信息。如果出现502 Bad Gateway,多半是socket权限或路径没对上,回头检查 listen.owner 和 fastcgi_pass 即可。
整个流程走下来,PHP-FPM应该就能稳定运行了。实际调优时还有更多参数可以折腾,比如 pm.max_requests 设成0可以让进程常驻,避免频繁重启;但生产环境为了防止内存泄漏,一般还是设一个合理的上限。这些看具体场景再慢慢调吧。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8