• 十四、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方法总是被缓存
    I have a dream so I study hard!!!
  • 相关阅读:
    java9
    java8
    java7
    JavaScript将字符串拆分为数组
    JavaScript return false
    Java中前台往后台传多个id参数
    Easyui清除tree的选中
    jquery easyui tree的全选与反选
    android源码开发基础知识了解
    Android activity的生命周期
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13657443.html
Copyright © 2020-2023  润新知