zoukankan      html  css  js  c++  java
  • NGINX负载均衡缓存配置

    环境:VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5

    1 概述

    如果我们的架构是前端负载均衡后端WEB集群时,可以开启nginx的缓存功能,把静态资源缓存到负载均衡机器上,这样负载均衡机器不用每次都去后端WEB集群获取资源,从而提高效率,当然单台机器开启缓存功能也是一样。

    2 火速看到效果

    参考nginx配置

    [root@lb01 ~]# hostname -I
    10.0.0.5 10.0.0.3 172.16.1.5 
    [root@lb01 ~]# cat /etc/nginx/proxy_params 
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    proxy_connect_timeout 30;
    proxy_send_timeout    60;
    proxy_read_timeout    60;
    
    proxy_buffering   on;
    proxy_buffer_size 32k;
    proxy_buffers     4 128k;
    [root@lb01 ~]# cat /etc/nginx/conf.d/webapps.conf 
    upstream static {
        server 172.16.1.7;
        server 172.16.1.8;
    }
    
    upstream dynamic {
        server 172.16.1.9;
        server 172.16.1.10;
    }
    
    proxy_cache_path  /data/nginx/cache  levels=1:2  keys_zone=STATIC:10m  inactive=24h  max_size=1g; #★★★
    
    server {
        listen 80;
    
        proxy_cache         STATIC; #★★★
        proxy_cache_valid   any 1m; #★★★
    
        location ~* .(jpg|jpeg|png|gif|bmp|mp4)$ {
            proxy_pass http://static;
            include    proxy_params;
        }
    
        location / {
            proxy_pass http://dynamic;
            include    proxy_params;
        }
    }
    [root@lb01 ~]# mkdir -p /data/nginx/cache
    [root@lb01 ~]# nginx -t
    [root@lb01 ~]# systemctl restart nginx
    

    解释

    • /data/nginx/cache就是存放缓存资源的目录
    • proxy_cache_path这条指令是包含在HTTP区块下的,定义了缓存路径,缓存目录结构层级等。
      • levels=1:2 两级缓存目录结构,就是定义生产几级子目录的,一般就用1:2,不必刨根问底。
      • keys_zone=STATIC:10m 定义缓存的名字STATIC(后面引用),缓存索引键值大小为10M。
      • inactive=24h 24小时缓存没有被使用,则删除之。
      • max_size=1g 缓存最大占用磁盘大小为1个G,到达1个G后自动清理不常用的缓存资源。
    • proxy_cache STATIC; 引用在HTTP区块定义的缓存。
    • proxy_cache_valid any 1m; 缓存所有状态码,可以把any替换成200,301等,1m表示缓存1分钟。

    配置好之后,多刷新几次浏览器,可以在负载机器上看到已经生成的文件,如下:

    进程过滤可以发现nginx多出一个缓存进程:

    3 缓存模块介绍

    proxy_cache_path

    Syntax:	  proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
    Default:  —
    Context:  http
    

    上述是官方语法贴过来的,其中不可省略的内容显然是最关键的。path定义缓存文件存放路径,keys_zone=name:size分别定义缓存名称和缓存键值占用空间大小,缓存名称可以给proxy_cache指令用。

    • levels=levels 目录层级结构,通常为1:2
    • use_temp_path 是否手动指定临时文件的存放位置(不是缓存文件存放位置),一般不用指定。
    • inactive=time 指定时间内缓存文件没被使用,则移除之。默认值10m。
    • max_size=size 缓存最大暂用多少本地磁盘空间。

    后面的参数都是关于缓存达到最大占用空间后么个删法,详情见官网。

    proxy_cache

    Syntax:	  proxy_cache zone | off;
    Default:  proxy_cache off;
    Context:  http, server, location
    

    zone是一个名称,由proxy_cache_path指令定义。

    proxy_cache_valid

    Syntax:	 proxy_cache_valid [code ...] time;
    Default: —
    Context: http, server, location
    

    控制缓存哪些状态码,以及缓存多长时间。状态码是可选的,如果仅仅定义缓存时间,则200,301,302会被缓存。该指令可以多次使用,如下:

    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 301      1h;
    proxy_cache_valid any      1m;
    

    表示200,302(临时重定向)缓存10分钟,301(永久重定向)缓存1分钟,其它状态码缓存1分钟。缓存时间还可以通过其它方式控制,详情见官网。

    4 综合实践

    不敢大言不惭称之为最佳实践,配置仅供参考:

    [root@lb01 ~]# cat /etc/nginx/conf.d/webapps.conf 
    upstream static {
        server 172.16.1.7;
        server 172.16.1.8;
    }
    
    upstream dynamic {
        server 172.16.1.9;
        server 172.16.1.10;
    }
    
    proxy_cache_path  /data/nginx/cache  levels=1:2  keys_zone=STATIC:10m  
                      inactive=24h  max_size=1g;
    
    server {
        listen 80;
    
        proxy_cache       STATIC;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301      1h;
        proxy_cache_valid any      1m;
        proxy_cache_use_stale  error timeout invalid_header updating
                               http_500 http_502 http_503 http_504;
    
        location ~* .(jpg|jpeg|png|gif|bmp|mp4)$ {
            proxy_pass http://static;
            include    proxy_params;
        }
    
        location / {
            proxy_pass http://dynamic;
            include    proxy_params;
        }
    }
    

    5 参考资料

    若想更深入学习nginx缓存功能,推荐直接看官方参考资料。

    1 官方缓存配置示例(推荐)

    https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/

    2 ngx_http_proxy_module(缓存功能对应的模块)

    http://nginx.org/en/docs/http/ngx_http_proxy_module.html

    其它参考资料

    3 缓存服务器设计与实现(二) - 半夏曲L(推荐)

    http://blog.sina.com.cn/s/blog_8e5354210101fdhm.html

    作者:阿胜4K
    出处:https://www.cnblogs.com/asheng2016/p/proxy_cache.html

  • 相关阅读:
    BiscuitOS/Linux 上构建 GFP_ZONE_TABLE【转】
    二、buildroot 构建交叉编译工具链【转】
    buildroot构建项目(一)---buildroot介绍【转】
    使用buildroot创建自己的交叉编译工具链【转】
    使用buildroot制作交叉编译工具链【转】
    Perf 简介【转】
    linux perf工具测试程序cpu cache刷回实验【转】
    Linux下的内核测试工具——perf使用简介【转】
    Build failed in step 'Retrieving needed toolchain components' tarballs【转】
    利用Crosstool-ng制作交叉编译工具链【转】
  • 原文地址:https://www.cnblogs.com/asheng2016/p/proxy_cache.html
Copyright © 2011-2022 走看看