> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/devops/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/devops/ngnix/ji-chu-zhi-shi/4.-nginx-fu-wu-qi-de-dai-li-fu-wu/4.7-nginx-fu-wu-qi-de-huan-cun-ji-zhi/ji-yu-proxy-cache-de-huan-cun-ji-zhi.md).

# 基于Proxy Cache的缓存机制

该机制是Nginx服务器自己实现的类似于Squid的缓存机制，它**使用md5算法将请求链接hash后生成文件系统目录保存响应数据**。

Nginx服务器在**启动后**，会生成专门的进程**对磁盘上的缓存文件进行扫描，在内存中建立缓存索引，提高访问效率**，并且还会生成专门的管理进程**对磁盘上的缓存文件进行过期判定、更新等方面的管理**。Proxy Cache缓存机制支持对任意链接响应数据的缓存，不仅限于200状态时的数据。

<mark style="color:orange;">**Proxy Cache缓存机制的一个缺陷是，它没有实现自动清理磁盘上缓存源数据的功能，因此在长时间使用过程中会对服务器存储造成一定的压力。**</mark>

{% code overflow="wrap" %}

```nginx
…#其他配置
http {
  ……     # 其他配置
  proxy_cache_path /myweb/server/proxycache levels=1:2 keys_zone=MYPROXYCACHE:10m max_size=2m inactive=5m loader_sleep=1m;       # 配置了缓存数据存放路径和Proxy Cache使用
                                               # 的内存Cache空间
  proxy_temp_path /myweb/server/tmp;           # 配置响应数据的临时存放目录
  server {
    ……   # 其他配置
    location  /  {
      …… # 其他配置
      proxy_pass  http://www.myweb.name/;
      proxy_cache  MYPROXYCACHE;               # 配置使用MYPROXYCACHE这个keys_zone
      proxy_cache_valid 200 302 1h;            # 配置200状态和302状态的响应缓存1小时
      proxy_cache_valid 301 1d;                # 配置301状态的响应缓存1天
      proxy_cache_valid any 1m;                # 配置其他状态的响应数据缓存1分钟
    }
  }
}
```

{% endcode %}

在该实例中，我们**首先在http块中配置了缓存数据存放路径和Proxy Cache使用的内存Cache空间**。

* 缓存数据存放在磁盘&#x4E0A;**/myweb/server/proxycache**目录下，它包含两级hash目录，缓存数据的总量不能超过20MB；
* 如果缓存在5分钟内没有被访问，则强制更新。
* 内存Cache空间的名字为**MYPROXYCACHE**，大小不能超过10 MB，每隔1分钟遍历一次磁盘缓存源数据，更新内存Cache中的缓存索引。

之后，我们**在server块中，配置使用上面设置好的MYPROXYCACHE内存空间进行Proxy Cache工作**，对不同响应状态的数据缓存时间进行了配置。
