文档章节

Nginx 手记(十)代理缓存服务

神奇Sam
 神奇Sam
发布于 2017/08/30 14:48
字数 597
阅读 391
收藏 1

缓存类型

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

流程

第一次:
    客户端请求 -> 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;
    }
    
}

© 著作权归作者所有

共有 人打赏支持
神奇Sam
粉丝 22
博文 41
码字总数 27998
作品 0
广州
程序员
系统架构的演变

一、最开始的网站架构 最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图: 二、应用、数据、文件分离 随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库...

罗文浩
2016/02/19
36
0
Nginx与Apache相比有哪些优势

Nginx作为HTTP服务软件的后起之秀,由于具有更好的稳定性和高效性,近年来已被越来越多的大中小网站所使用。而传统的LAMP网络架构组合也逐渐被LNMP(或者LEMP,其中的E取自“engine x”)所取...

tynecastle
2016/11/17
0
0
Nginx server之Nginx作为web服务器(基于域名或IP的web服务器)

一:nginx简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开...

fighting-cluber
2014/03/11
0
0
Linux学习手记

生成SSL证书 openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr 开源免费SSL证书:https://letsencrypt.org/ http://www.vpser.net/build/letsencrypt-certbot......

flydo
2015/12/16
165
0
面试宝典系列-nginx的缓冲和缓存

缓冲:用缓冲解放后端 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响。在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻。 缓冲就是nginx代理缓冲从...

suyain
09/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
12分钟前
0
0
JavaScript使用原型判断对象类型

1. constructor属性 在JavaScript创建对象(二)——构造函数模式中,我们说过可以使用对象的constructor属性判断对象的类型:p1.constructor === Person,可能当时就有细心的读者会想,我们...

Bob2100
14分钟前
0
0
10-《深度拆解JVM》JVM是怎么实现invokedynamic的?(下)

一、问题引入 上回讲到,为了让所有的动物都能参加赛马,Java 7 引入了 invokedynamic 机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解 invokedynamic,而是深入地探讨了它所依赖...

飞鱼说编程
34分钟前
2
0
457. Circular Array Loop

Description Difficulty : Medium You are given an array of positive and negative integers. If a number n at an index is positive, then move forward n steps. Conversely, if it's n......

52iSilence7
50分钟前
1
0
MySQL SQL 常见用法

某字段重复记录 select a.fieldA from tableA a group by a.fieldA having count(a.fieldA)>1;==select * from (select a.fieldA, count(1) as faCount from tableA a group......

园领T
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部