文档章节

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

神奇Sam
 神奇Sam
发布于 2017/08/30 14:48
字数 597
阅读 399
收藏 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
粉丝 23
博文 41
码字总数 27998
作品 0
广州
程序员
私信 提问
系统架构的演变

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

罗文浩
2016/02/19
36
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
Nginx与Apache相比有哪些优势

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

tynecastle
2016/11/17
0
0
Varnish调优手记

最近公司做活动推广,流量暴增,后端服务器压力山大,导致用户的请求响应时间延长,客户因此抱怨声音很大。   为尽快解决问题,在安排人员不断优化后端代码的同时,考虑在nginx前增加varni...

nmshuishui
2014/05/07
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

没有更多内容

加载失败,请刷新页面

加载更多

大数据学习之大数据技术笔记—spring入门

篇一 spring介绍 spring.io 官网 快速开始 Aop 面向切面编程,可以任何位置,并且可以细致到方法上 连接框架与框架 Spring 就是 IOC AOP 思想 有效的组织中间层对象一般都是切入 service 层 ...

董黎明
9分钟前
2
0
Linux如何查看进程、杀死进程、启动进程等常用命令

关键字: linux 查进程、杀进程、起进程 1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。 ps c 列出程序时,显示每个程...

临江仙卜算子
27分钟前
3
0
ASP.NET Core MVC 静态文件配置

在启动文件中添加以下配置 public class Startup{ public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddDirectoryBrowser(); ......

whltian
38分钟前
1
0
linux之自定义命令

本人使用的是ubuntu系统,不喜欢建各种桌面快捷链接,但是每次启动个软件,去查找又麻烦,所以自定义了命令,来快捷的启动应用: 1、修改/etc/bash.bashrc,在文件末尾,加上如下List-1中的内...

克虏伯
45分钟前
7
0
linux基础

系统安全 sudo su chmod setfacl 进程管理 w top ps kill pkill pstree killall 用户管理 id usermod useradd groupad userdel 文件系统 mount umount fsck df du 网络应用 curl telnet mail......

关元
47分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部