# 代理缓存与压缩

URL: https://caijiao.org/nginx/proxy-cache
Source: docs/nginx/proxy-cache.md
Description: 本节介绍 Nginx 的代理缓存和 gzip 压缩配置，包括缓存策略、缓存路径、压缩类型及优化建议，提高 Web 服务性能和响应速度。

Nginx 可以通过代理缓存和 gzip 压缩显著提升网站性能，减少后端负载，加快客户端响应速度。

## 一、代理缓存配置

### 1. 定义缓存路径

```nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
````

* **levels**：缓存目录层级
* **keys_zone**：共享内存区，用于存储缓存键
* **inactive**：缓存多久未访问自动过期
* **max_size**：缓存总大小

### 2. 在 location 中启用缓存

```nginx
location / {
    proxy_cache my_cache;
    proxy_pass http://backend;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    add_header X-Cache-Status $upstream_cache_status;
}
```

* **proxy_cache_valid**：设置不同响应码的缓存时间
* **proxy_cache_use_stale**：后端异常时使用过期缓存
* **$upstream_cache_status**：缓存命中状态（HIT / MISS / BYPASS）

## 二、Gzip 压缩配置

启用 gzip 压缩减少网络传输量：

```nginx
http {
    gzip on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/javascript application/json text/xml application/xml application/xml+rss text/javascript;
    gzip_comp_level 5;
    gzip_vary on;
}
```

* **gzip_types**：指定压缩 MIME 类型
* **gzip_comp_level**：压缩等级（1-9，推荐 4~6 平衡性能与压缩比）
* **gzip_vary on**：让代理和 CDN 缓存区分压缩状态

## 三、优化建议

1. 对动态请求缓存时，避免缓存敏感数据
2. 配合 `proxy_cache_use_stale` 提高高并发下的可用性
3. 静态资源使用 gzip 压缩，并合理设置浏览器缓存
4. 定期清理过期缓存，防止磁盘占满

---

通过代理缓存和 gzip 压缩，Nginx 可以显著提升网站性能，减轻后端压力，并加快客户端页面加载速度。
