# 优化 PHP 性能与安全

URL: https://caijiao.org/nginx/php-optimization
Source: docs/nginx/php-optimization.md
Description: 本节介绍如何通过 Nginx 与 PHP-FPM 配置优化 PHP 性能与安全，包括 opcode 缓存、限制请求、文件权限、FastCGI 安全设置及防护建议。

在 Nginx 与 PHP-FPM 集成中，合理优化 PHP 性能并加强安全性是保证 Web 服务高效稳定运行的关键。

## 一、性能优化

### 1. 启用 Opcode 缓存

PHP 提供 Opcache，可缓存编译后的 PHP 字节码，减少解析开销：

```ini
; php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
````

### 2. 调整 PHP-FPM 池配置

* pm = dynamic，合理设置 `max_children`、`start_servers`、`min_spare_servers` 和 `max_spare_servers`
* 根据服务器内存与并发量优化进程数量

### 3. 静态资源由 Nginx 直接处理

* 图片、CSS、JS 等静态文件不经过 PHP-FPM
* 使用 `location ~* \.(jpg|png|css|js)$` 设置缓存与压缩

### 4. 开启 gzip 压缩

```nginx
http {
    gzip on;
    gzip_types text/plain text/css application/javascript application/json;
}
```

减少网络传输流量，提高加载速度。

---

## 二、安全优化

### 1. 限制文件访问

```nginx
location ~ /\.ht {
    deny all;
}
```

禁止访问敏感文件，如 `.htaccess`。

### 2. PHP-FPM 用户权限

* 设置 pool 用户与 Nginx 进程用户一致
* 避免使用 root 运行 PHP-FPM

### 3. FastCGI 安全设置

* 设置 `open_basedir` 限制 PHP 访问路径
* 禁止 PHP 执行非必要命令

```ini
php_admin_value[open_basedir] = /var/www/html:/tmp/
php_admin_flag[allow_url_fopen] = off
```

### 4. 限制请求大小与超时

```nginx
client_max_body_size 10M;
fastcgi_read_timeout 300;
```

防止大文件上传或慢速请求造成服务阻塞。

---

通过以上优化措施，可以显著提升 Nginx 与 PHP-FPM 动态请求性能，同时降低潜在安全风险，保障网站稳定运行。
