十四、nginx缓存代理服务器

一、概念

在代理服务器的磁盘中保存请求目标的内容,加快响应速度,减少应用服务器(后端服务器)上的资源 开销,比如多客户端请求相同的资源,代理缓存命中后,对于应用服务器来说,只发生了一次资源调 度。

而浏览器上的缓存配置,一般来说是用来减少本地IO的,请求目标的内容会存放在浏览器本地。

二、缓存代理的配置

# 代理服务器配置:
proxy_cache_path /data/nginx/cache max_size=10g levels=1:2
keys_zone=nginx_cache:10m inactive=60m use_temp_path=off;
upstream nginx {
  server 192.168.0.114;
}
server {
  listen 80;
  server_name localhost;
  location / {
    root html;
    index index.html index.htm;
    proxy_pass http://nginx;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_cache nginx_cache;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 302 1d;
  }
}

proxy_cache_path /data/nginx/cache #缓存资源存放路径,如果cache不存在会自动创建。
levels #设置缓存资源的递归级别,默认为levels=1:2,表示Nginx为将要缓存的资源生成的key从后依次设置两级保存。
levels=1:2:2 #定义缓存目录结构层次,1:2:2 可以生成2^4x2^8x2^8=1048576个目录
key_zone #在共享内存中设置一块存储区域来存放缓存的key和metadata,这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
max_size #最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除不活跃的cache文件
inactive #缓存有效时间,未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为
expired #缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
use_temp_path #如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
proxy_cache zone | off #默认off指明调用的缓存,或关闭缓存机制;Context:http, server, location
proxy_cache_key string #缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_valid [code ...] time #定义对特定响应码的响应内容的缓存时长,定义在http{...}中,示例:proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;

示例:

在http中定义缓存信息

在http配置定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:2:2 keys_zone=proxycache:20m
inactive=120s max_size=1g;
说明:proxycache:20m 指内存中缓存的大小,主要用于存放key和metadata(如:使用次数)
max_size=1g 指磁盘存入文件内容的缓存空间最大值

在server中调用

调用缓存功能,需要定义在相应的配置段,如server{...};
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
proxy_cache_use_stale;

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存

 

posted @ 2020-09-12 16:19  yaowx  阅读(249)  评论(0编辑  收藏  举报