# Nginx 与 PHP-FPM 集成

URL: https://caijiao.org/nginx/php-fpm-integration
Source: docs/nginx/php-fpm-integration.md
Description: 本节介绍如何将 Nginx 与 PHP-FPM 集成，包括配置 FastCGI 转发、PHP-FPM 池匹配、动态请求处理与安全优化，实现高性能 PHP 网站部署。

Nginx 与 PHP-FPM 集成可以高效处理动态 PHP 请求，实现 Web 与应用分离，提高网站性能与可维护性。

## 一、配置 FastCGI 转发

在 server/location 块中配置 `.php` 文件处理：

```nginx
server {
    listen 80;
    server_name example.com;

    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
````

### 核心指令说明

* **include fastcgi_params**：加载标准 FastCGI 参数
* **fastcgi_pass**：指定 PHP-FPM 监听地址或 Unix Socket
* **fastcgi_index**：默认 PHP 文件
* **fastcgi_param SCRIPT_FILENAME**：传递完整脚本路径

## 二、PHP-FPM 池匹配

确保 Nginx `fastcgi_pass` 地址与 PHP-FPM 池监听地址一致，例如：

```ini
; /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
```

Nginx 可以通过 TCP 或 Unix Socket 与 PHP-FPM 通信。

## 三、处理请求流程

1. 客户端访问 PHP 页面
2. Nginx 匹配 location ~ .php$
3. 转发请求到 PHP-FPM 池
4. PHP-FPM 处理脚本并生成响应
5. Nginx 返回响应给客户端

## 四、安全与优化建议

1. 禁止直接访问 PHP 配置文件、日志文件等敏感资源
2. 使用 Unix Socket 提升性能并限制访问
3. 设置 PHP-FPM 池用户与组为 Nginx 进程用户
4. 开启 opcode 缓存（如 Opcache）提高 PHP 性能
5. 对静态文件由 Nginx 直接处理，减少 PHP-FPM 负载

---

通过合理配置 Nginx 与 PHP-FPM 集成，可以实现高性能、稳定且安全的 PHP Web 服务，是动态网站部署的标准做法。
