PHP-FPM:PHP 网站
在 VDS 上安装 PHP-FPM,将其与 Nginx 集成,根据您档位的内存选择进程数,以及排查 502 和 504 错误。
更新于 2026年8月23日
PHP-FPM 是一个独立执行 PHP 代码的服务,Web 服务器只负责把请求转发给它。WordPress、Laravel、Bitrix 以及几乎所有 PHP 项目都是这样运行的。
安装
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
在 AlmaLinux 和 CentOS Stream 上,请使用 dnf install -y php-fpm php-mysqlnd ...;服务名称为 php-fpm。要查看确切版本,请运行:
php -v
systemctl list-units | grep fpm
连接到 Nginx
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
打开 /info.php,确认 PHP 正常工作,然后立即删除该文件:它会暴露版本、路径和模块列表。
保留多少个进程
每个 PHP 工作进程占用 40–120 MB。请按套餐规格来规划,并为数据库和系统留出内存。相关配置位于 /etc/php/8.3/fpm/pool.d/www.conf:
| 套餐 | 内存 | 合理的 pm.max_children |
|---|---|---|
| VDS-1 | 2 GB | 5 |
| VDS-2 | 4 GB | 10 |
| VDS-3 | 8 GB | 20 |
| VDS-5 | 24 GB | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
pm.max_requests 会在处理 N 个请求后重启进程,这样代码中的内存泄漏就不会一直累积到周末。
FPM 常用的 php.ini 取值:memory_limit = 256M、upload_max_filesize = 64M、post_max_size = 64M、opcache.enable = 1。
修改后请执行:systemctl reload php8.3-fpm。
常见错误
| 现象 | 原因 | 处理方法 |
|---|---|---|
502 Bad Gateway | socket 路径错误或服务未运行 | 对照 /run/php/ 中的实际文件检查 fastcgi_pass |
504 Gateway Time-out | 脚本运行时间超过超时限制 | 调高 fastcgi_read_timeout 和 max_execution_time |
| 浏览器下载文件而不是执行它 | location ~ \.php$ 块未匹配 | 检查 location 块的顺序并运行 nginx -t |
日志中出现 server reached pm.max_children | 进程数不足 | 如果内存允许就调高上限,否则升级套餐 |
日志:/var/log/php8.3-fpm.log 和 /var/log/nginx/error.log。
请使用仅对自己 schema 有权限的独立用户来创建站点数据库——用户与授权。在 CMS 配置中使用
root账户,等于直接走向一次性丢失所有数据库的结局。