在 Ubuntu 上配置 PHP-FPM,通常用于配合 Nginx 或 Apache。下面给你一套从安装到常见配置的完整说明(以 Ubuntu 20.04 / 22.04 为例,PHP 7.4 / 8.x 都适用)。
apt update
apt search php
sudo apt install php8.1-fpm
如果要用 PHP 7.4:
sudo apt install php7.4-fpm
安装完成后,服务会自动启动。
systemctl status php8.1-fpm
PHP-FPM 主要配置文件在:
/etc/php/8.1/fpm/
重要文件和目录:
| 路径 | 说明 |
|---|---|
/etc/php/8.1/fpm/php-fpm.conf |
主配置 |
/etc/php/8.1/fpm/pool.d/www.conf |
默认进程池配置 |
/run/php/php8.1-fpm.sock |
Unix Socket(Nginx 用) |
/var/log/php8.1-fpm.log |
日志 |
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
user = www-data
group = www-data
listen = /run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data
✅ Nginx 推荐用 socket,不要用 TCP 端口
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
适用场景:
| 场景 | 建议 |
|---|---|
| 小网站 | pm = dynamic |
| 高并发 | pm = static |
| 大内存 | 提高 max_children |
⚠️ max_children 不要盲目设太大,否则会 OOM。
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
sudo nginx -t
sudo systemctl reload nginx
sudo a2enmod proxy_fcgi setenvif
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
# 重启
sudo systemctl restart php8.1-fpm
# 重载
sudo systemctl reload php8.1-fpm
# 查看错误日志
tail -f /var/log/php8.1-fpm.log
✅ 解决:
ls -l /run/php/
fastcgi_passexpose_php = Off
disable_functions = exec,passthru,shell_exec,system
如果你愿意,可以告诉我:
我可以给你一份完全贴合你环境的配置。