阅读 272

Nginx代理缓存机制(nginx反向代理及缓存机制)

缓存简介

Nginx的http_proxy模块,可以实现类似于Squid的缓存功能。

Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络阻塞,同时还能减小数据传输延迟,提高用户访问速度。

同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务的鲁棒性即健壮性。

  • 对于缓存,我们大概会有以下问题 :

  1. 缓存文件放哪儿 ?

  2. 如何指定哪些请求被缓存 ?

  3. 缓存的有效期是多久 ?

  4. 对于某些请求,是否可以不走缓存 ?

解决这些问题后,Nginx的缓存也就基本配置完成了。

  • 缓存文件放在哪儿 ?

  1. proxy_cache_path:Nginx 使用该参数指定缓存位置。

  2. proxy_cache:该参数为之前指定的缓存名称。

  3. proxy_cache_path:有两个必填参数, 第一个参数为缓存目录。 第二个参数keys_zone指定缓存名称和占用内存空间的大小。 

    nginx.confg 配置文件
    
    http {
    	proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;
            upstream www.nicole.com{
               server 127.0.0.1:8881;
               server 127.0.0.1:8882;
               server 127.0.0.1:8883;        
            }
            server{
                listen 80 ;
                proxy_cache one ;
                server_name www.nicole.com;
            }
    }复制代码

注 :示例中的10m是对内存中缓存内容元数据信息大小的限制,如果想限制缓存总量大小,需要用max_size参数。 

  • 如何指定哪些请求被缓存?

  1. Nginx默认会缓存所有get和head方法的请求结果,缓存的key默认使用请求字符串。

  2. 自定义Key  例如proxy_cache_key "hosthosthostrequest_uri$cookie_user" ;

  3. 指定请求至少被发送了多少次以上时才缓存,可以防止低频请求被缓存。例如proxy_cache_min_uses 5 ;

  4. 指定哪些方法的请求被缓存,例如proxy_cache_methods GET HEAD POST ;

    nginx.confg 配置文件
    
    http {
    	proxy_cache_path /data/nginx/cache keys_zone=one:10m;
           upstream www.nicole.com{
               server 127.0.0.1:8881;
               server 127.0.0.1:8882;
               server 127.0.0.1:8883;      
           }        server{
                listen 80 ;
                proxy_cache one ;
                server_name www.nicole.com;
                    location / {
                         proxy_pass         http://www.nicole.com;                     
                         proxy_set_header   Host        $host;
                         proxy_set_header   X-Real-IP   $remote_addr;
                         proxy_cache_key    $host$request_uri$cookie_user;
                    }        }
    }复制代码
  • 缓存有效期

默认情况下,缓存内容是长期留存的,除非缓存的总量超出限制。可以指定缓存有效时间,例如 :

  1. 响应状态码为200 、302 时 ,10分钟有效 ,proxy_cache_valid 200 302 10m ;

  2. 对应任何状态码,5分钟有效 ,proxy_cache_valid any 5m ; 

    nginx.confg 配置文件
    
    http {
           proxy_cache_path /data/nginx/cache keys_zone=one:10m;
           upstream www.nicole.com{
               server 127.0.0.1:8881;
               server 127.0.0.1:8882;
               server 127.0.0.1:8883;      
           }
            server{
                listen 80 ;
                proxy_cache one ;
                server_name www.nicole.com;
                    location / {
                         proxy_pass         http://www.nicole.com;
                         proxy_set_header   Host        $host;
                         proxy_set_header   X-Real-IP   $remote_addr;
                         proxy_cache_valid 200 302 10m ;
                    }
            }
    }复制代码
  • 对于某些请求,是否可以不走缓存 ?

proxy_cache_bypass : 该指令响应来自原始服务器而不是缓存。

例如proxy_cache_bypass cookie_nocachecookie\_nocachecookie_nocachearg_nocache $arg_comment ;

如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发。

nginx.confg 配置文件

http {
       proxy_cache_path /data/nginx/cache keys_zone=one:10m;
       upstream www.nicole.com{
           server 127.0.0.1:8881;
           server 127.0.0.1:8882;
           server 127.0.0.1:8883;      
       }
        server{
            listen 80 ;
            proxy_cache one ;
            server_name www.nicole.com;
                location / {
                     proxy_pass         http://www.nicole.com;
                     proxy_set_header   Host        $host;
                     proxy_set_header   X-Real-IP   $remote_addr;
                     proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment ;
                }
        }
}复制代码

缓存原理

网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:

缓存配置

操作配置后,curl -I 命令验证缓存的状态  。


作者:是Nicole呀
链接:https://juejin.cn/post/7036281834728554533

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐