Nginx 的 proxy_cache 模块启用的前置条件
- Nginx 必须作为反向代理使用;
- 依靠文件系统存储索引级别的文件,本质上是将一个请求当做一个文件存储在本地,下一次请求过来,通过看本地有没有对应的文件,来决定 proxy cache 是否启用;
- 依靠内存,缓存文件的地址,虽然缓存的内容是以文件的形式缓存在磁盘中,但缓存的 key 是存储在内存中,这个 key 在内存中的值就是缓存的内容的文件在文件系统中的地址;
开启 proxy_cache 的 Nginx 要做的配置
# 声明一个 cache 节点;
# levels=1:2 先将 URL 做一个哈希,取最后一位,作为文件的目录,再取一位,作为二级目录的索引,这样,所有
# 的缓存文件会分散到多个目录当中,减少寻址的消耗;
# keys_zone=tmp_cache:100m 给当前的缓存起个名字,起什么无所谓,内存大小 100M,用于存储缓存的 key;
# max_size=10g 磁盘总量超过 10g,采用 LRU 算法淘汰;
proxy_cache_path /home/lixinlei/application/openresty/nginx/temp_cache levels=1:2 keys_zone=tmp_cache:100m inactive=7d max_size=10g;
location / {
proxy_pass http://backend_server;
# 开启 proxy_cache,具体配置按照 tmp_cache 这个 keys_zone 中的设定配置;
proxy_cache tmp_cache;
# 以请求的 uri 作为缓存的 key;
proxy_cache_key $uri;
# 只对返回码为 200 206 304 302 响应的内容做缓存;
proxy_cache_valid 200 206 304 302 7d;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
开启 Nginx proxy_cache 后的性能提升
- 吞吐量没有全部命中本地热点缓存的高,因为 Nginx 的 proxy_cache 把响应缓存到文件系统,在硬盘中,没在内存里;
- 访问 Nginx 的本地磁盘尚且如此,访问远程 NAS 磁盘的性能更慢;
- 所以 Nginx 的 proxy_cache 一般不开启;