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

  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/asheng2016/p/proxy_cache.html
Copyright © 2011-2022 走看看