Skip to content

63 Nginx代理层缓存

Jinxin Chen edited this page Dec 11, 2019 · 1 revision

利用 Nginx 代理层缓存,可以减少client向后端服务器的请求,从而降低后端服务器压力,提升性能

HTTP 模块配置

proxy_buffering                 on;
proxy_buffer_size               4k;
proxy_buffers                   8 4k;
proxy_busy_buffers_size         8k;
proxy_cache_path                /data/nginx/cache/proxy_cache levels=1:2 keys_zone=cache:512m inactive=20m max_size=1g use_temp_path=off;

参数说明:

  • proxy_buffering:是否启用缓冲。当启用时,Nginx会尽快的从后端服务器读取数据,并存储到 proxy_buffers 设定的缓冲区。如果数据超过缓冲区大小,则会先被保存到临时文件中。禁用时,数据会同步的发送给client。
  • proxy_buffer_size:缓冲区大小,默认为 内存页大小,可以通过 getconf PAGESIZE 获取
  • proxy_buffers:缓冲区数量和大小,大小默认为 内存页大小。
  • proxy_busy_buffers_size:发送给client的缓冲区大小,默认为缓冲区大小的两倍。

proxy_cache_path 参数说明:

  • levels:目录层级,1:2表示2层目录结构存储,比如:/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
  • keys_zone:缓存key的共享内存区,1m可以存储8千个key
  • inactive:缓存有效时间,如果经过该时间还没有被访问到,则删除该缓存
  • max_size:缓存数据最大大小
  • use_temp_path:是否将数据先写入临时文件(proxy_temp_path),再写入缓存目录

proxy_cache 配置

location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|woff2)$ {
    proxy_cache cache;
    proxy_cache_key $scheme$proxy_host$request_uri;
    proxy_cache_valid 1M;
    proxy_ignore_headers Expires Cache-Control;
    add_header cache-status $upstream_cache_status;
}

参数说明:

  • proxy_cache:指定使用哪个共享内存区缓存数据
  • proxy_cache_key:缓存文件key,默认为完整的URL
  • proxy_cache_valid:为不同的响应状态码设定缓存,如果只设定时间,则 200, 301, 302 都将同时被缓存
  • proxy_ignore_headers :禁止代理服务器处理请求头,避免被Expires Cache-Control等参数影响缓存有效性。
  • add_header cache-status $upstream_cache_status : 在响应头添加缓存命中状态,方便调试。

实际使用时,可以将 /cache 路径替换为 css/js 等静态文件,从而直接从 proxy 返回响应而无需再将请求发送给后端服务器。

time format:

  • ms milliseconds
  • s seconds
  • m minutes
  • h hours
  • d days
  • w weeks
  • M months, 30 days
  • y years, 365 days

参考:

Clone this wiki locally