Debian 上 Nginx 与 PHP-FPM 集成方案
一 架构与准备
- 组件分工:Nginx 负责处理 HTTP/HTTPS 与静态资源,PHP-FPM 作为 FastCGI 进程管理器执行 PHP 脚本,二者通过 Unix 套接字或 TCP 端口通信。
- 版本确认:先确认系统仓库中的 PHP 版本(如 7.4/8.0/8.2/8.3),后续路径与包名需与之匹配。
- 基础环境:更新索引并安装 Nginx 与 PHP-FPM,启动并设置开机自启。
- 防火墙:如使用 UFW,放行 HTTP/HTTPS 流量。
以上做法为 Debian 上部署 LNMP 的通用起点。
二 安装与启用服务
- 更新索引并安装软件包:
sudo apt update
sudo apt install nginx php-fpm
- 启动并启用服务:
sudo systemctl start nginx && sudo systemctl enable nginx
sudo systemctl start php7.4-fpm && sudo systemctl enable php7.4-fpm
- 说明:请将 7.4 替换为你的实际 PHP 版本(如 8.0/8.2/8.3)。
- 可选防火墙:
sudo ufw allow ‘Nginx Full’
以上命令完成 Nginx 与 PHP-FPM 的安装与常驻化。
三 配置 PHP-FPM
- 编辑池配置(示例路径,按版本调整):
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
- 常用关键项(保持与 Nginx 运行用户一致,通常为 www-data):
- 监听方式(二选一,推荐 Unix 套接字):
- Unix 套接字:listen = /run/php/php7.4-fpm.sock
- TCP 端口:listen = 127.0.0.1:9000
- 权限与运行身份:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = www-data
group = www-data
- 应用并验证:
sudo systemctl restart php7.4-fpm
sudo systemctl status php7.4-fpm
以上配置确保 PHP-FPM 以合适的身份与 Nginx 通信。
四 配置 Nginx 处理 PHP
- 编辑站点配置(示例为默认站点):
sudo nano /etc/nginx/sites-available/default
- 核心配置片段:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 若用 TCP,改为 127.0.0.1:9000
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}
- 语法检查与生效:
sudo nginx -t
sudo systemctl reload nginx
- 说明:如使用 TCP 方式,将 fastcgi_pass 改为 127.0.0.1:9000 并确保 PHP-FPM 的 listen 与之对应。
以上配置让 Nginx 将 .php 请求转发给 PHP-FPM 执行。
五 测试与优化安全
- 功能测试:
echo “” | sudo tee /var/www/html/info.php
浏览器访问:http://服务器IP/info.php,出现 PHP 信息页即成功;测试后建议删除该文件。
- 性能与安全优化:
- 进程与资源:在 PHP-FPM 池配置中按负载调整 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers;可按需设置 php_admin_value[memory_limit]、php_admin_value[max_execution_time]。
- 静态资源:为图片、CSS、JS 等配置缓存与压缩,减轻 PHP-FPM 压力。
- 安全加固:限制上传大小、禁用危险函数、隐藏版本信息、仅允许必要方法;启用 HTTPS(如 Let’s Encrypt)。
- 监控与维护:定期查看 Nginx 与 PHP-FPM 日志,监控请求速率与资源使用,按需调优。
以上步骤完成验证并给出常见优化方向。