环境: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

NGINX负载均衡缓存配置的更多相关文章

  1. nginx负载均衡简单配置

    nginx负载均衡简单配置准备三台虚拟机来做这个实验:192.168.232.132        web服务器192.168.232.133        web服务器192.168.232.134 ...

  2. nginx负载均衡及配置

    nginx负载均衡及配置 1 负载均衡概述 负载均衡由来是因为当一台服务器单位时间内的访问量很大时,此时服务器的压力也会很大,当超过自身承受能力时,服务器就会崩溃.为避免让服务器崩溃,用户拥有更好的体 ...

  3. nginx负载均衡常见问题配置信息

    nginx为后端web服务器(apache,nginx,tomcat,weblogic)等做反向代理 几台后端web服务器需要考虑文件共享,数据库共享,session共享问题.文件共享可以使用nfs, ...

  4. nginx 负载均衡简单配置

    配置要求: 三台服务器 127.0.0.1       主负载(把访问请求分给主机池) 127.0.0.2       主机2 127.0.0.3       主机3 第一步: 配置127.0.0.1 ...

  5. Nginx负载均衡各种配置方式

    Nginx负载均衡 - 小刚qq - 博客园http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html Module ng ...

  6. Nginx负载均衡NFS配置

    Nginx配置 首先在两台服务器上部署同一个项目,例如下: 测试网站节点1: http://192.168.168.61/nfstest/ 测试网站节点2: http://192.168.64.145 ...

  7. php nginx 负载均衡简单配置过程

    负载均衡 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解 ...

  8. window下nginx负载均衡简单配置-----权重的实现

    下面介绍一个在window下的nginx的负载均衡配置. 需要你在你的电脑上跑两个tomcat.一个8080,一个9080. 需要一个nginx服务器. 需要修改本机的host 注意:我们这里配置不会 ...

  9. Nginx负载均衡简易配置

    多台Web服务器水平扩展,进行负载均衡对外服务,是一种很常见的方案. 常用方法用DNS轮询,LVS. DNS轮询虽然有配置简单的有点,但无法实现健康检查,DNS修改需要较长时间失效,对于无域名的内部服 ...

随机推荐

  1. Objective-C官方文档 协议

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 在现实生活中,当处理某一情况的时候人们往往遵循严格的程序.执法人员他们在打官司的收集证据和询问的时候一定要遵守协议. 在面向对象的语言中,最重要的是 ...

  2. 【框架学习】Nancy 框架

    Nancy 框架 http://liulixiang1988.github.io/nancy-webkuang-jia.html .是一个轻量级用于构建http相应的web框架: .与mvc类似,有自 ...

  3. JavaScript 浮点数陷阱及解法

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

  4. 如何将Ubuntu左边的面板放到底部

    直入主题,有些人不喜欢ubuntu默认的面板在左边(笔者就是~囧~),我还是喜欢将面板放入到桌面的底部,这样更符合自己的使用习惯,但是ubuntu默认是不支持的,需要通过配置工具来配置. 这个时候我们 ...

  5. html5新增标签/删除标签

    闲聊: 最近小颖工作稍微比较轻松,没事就看看慕课,看了看:HTML5之元素与标签结构,里面简单讲解了下HTML5的一些新特性,小颖之前没写过HTML5的页面,所以就当写笔记将那些新的特性整理出来,也方 ...

  6. nginx命令行参数和信号

    nginx命令行参数 [user@host dir]$ /usr/local/nginx/sbin/nginx -hnginx version: nginx/1.8.0Usage: nginx [-? ...

  7. ASP.NET Request.Cookies获取某个Cookie的奇怪问题

    公司的某个产品依赖一个Cookie的值,发现在某些情况下即使Request附带了该Cookie(通过Fiddler2监控),服务器端通过HttpContext的Request.Cookies访问该Co ...

  8. Windows Phone Bing lock screen doesn't change解决方法

    之前一直用的Lumia 925,Bing lock screen每天都会更换.这几天换了Lumia 930,同步了账号相关的设置,发现Bing lock screen不再每天更换.尝试重启.使用cel ...

  9. vi 撤销操作

    'u' : 撤销上一个编辑操作 'ctrl + r' : 恢复,即回退前一个命令 'U' : 行撤销,撤销所有在前一个编辑行上的操作

  10. 【BZOJ4361】isn 动态规划+树状数组+容斥

    [BZOJ4361]isn Description 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案, ...