Nginx 手记(十)代理缓存服务
Nginx 手记(十)代理缓存服务
神奇Sam 发表于4个月前
Nginx 手记(十)代理缓存服务
  • 发表于 4个月前
  • 阅读 368
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

缓存类型

  • 客户端缓存
  • 代理缓存
  • 服务端缓存

流程

第一次:
    客户端请求 -> nginx代理(无缓存)-> 服务端
                                            |
        客户端 <- nginx代理(进行代理缓存)<---
    
第二次:
    客户端请求 -> nginx代理(有缓存)-> 客户端

配置语法

#缓存的空间
语法:proxy_cache_path string [...]
默认值:无
上下文:http,server,location

#缓存配置
语法:proxy_cache zone|off
默认值:proxy_cache off;
上下文:http,server,location

#缓存过期周期
#code:返回状态码
#time:过期的时间周期
语法:proxy_cache_valid [code ...] time;
默认值:无
上下文:http,server,location

#缓存的纬度
语法:proxy_cache_key string;
默认值:proxy_cache_key $scheme$proxy_host$request_uri;
上下文:http,server,location

配置用例
upstream backend {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}

#代理缓存空间
#levels:缓存文件按照两层目录进行分级保存
#keys_zone:定义这个空间的名字,10m为这个空间的大小(一般1m可以存放8000个key)
#max_size:这个缓存空间的最大空间,满了会触发淘汰规则进行处理
#inactive:不活跃时间 表示在60分钟内,如果该缓存文件没被访问,会把它清理掉
#use_temp_path:临时文件,建议关闭。
proxy_cache_path /opt/site/cache levels=1:2 keys_zone=sam_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost www.sam.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    
    #匹配uri,如果uri为 /login 或 /register 或 /password/reset,添加变量$cookie_nocache 值为1
    if ($request_uri ~ ^/(login|register|password\/reset)){
        set $cookie_nocache 1;
    }

    location / {
        proxy_pass http://backend;
        
        proxy_cache sam_cache;                  #使用前面定义的proxy_cache_path
        proxy_cache_valid 200 304 12h;          #设置200和304过期时间为12h
        proxy_cache_valid any 10m;              #其他过期时间为10分钟
        proxy_cache_key $host$uri$is_args$args; #修改缓存纬度,缓存的key
        add_header Nginx-Cache "$upstream_cache_status";
        
        #配置不缓存的,如果上面条件判断中有新增变量$cookie_nocache,那么对应请求不进行缓存
        proxy_no_cache $cookie_nocache;
        
        #当命中的服务器出现错误、超时、请求头不完整、500、502、503时,会跳过这一台服务器去访问下一台服务器。
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        
        ###### 以下是代理常规配置 ######
        proxy_redirect default; #一般配置默认即可
        
        #添加头信息
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        
        #配置超时
        proxy_connect_timeout 30;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        
        #配置缓冲区,
        proxy_buffer_size 32k;
        proxy_buffering on;
        proxy_buffers 4 128k;
        proxy_busy_buffers_size 256k;
        proxy_max_temp_file_size 256k;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
}
标签: Nginx CentOS Linux
共有 人打赏支持
粉丝 16
博文 41
码字总数 27998
×
神奇Sam
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: