查看服务

  1. netstat -lntp|grep 80

Nginx作为缓存WEB服务

通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后端压力,提高网站并发延时

Nginx代理缓存原理

缓存配置语法

proxy_cache配置语法

  1. Syntax: proxy_cache zone | off;
  2. Default: proxy_cache off;
  3. Context: http, server, location
  4. //缓存路径
  5. Syntax: proxy_cache_path path [levels=levels]
  6. [use_temp_path=on|off] keys_zone=name:size [inactive=time]
  7. [max_size=size] [manager_files=number] [manager_sleep=time][manager_threshold=time]
  8. [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off]
  9. [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  10. Default:
  11. Context: http

缓存过期周期

  1. Syntax: proxy_cache_valid [code ...] time;
  2. Default:
  3. Context: http, server, location
  4. //示例
  5. proxy_cache_valid 200 302 10m;
  6. proxy_cache_valid 404 1m;

缓存的维度

  1. Syntax: proxy_cache_key string;
  2. Default: proxy_cache_key $scheme$proxy_host$request_uri;
  3. Context: http, server, location
  4. //示例
  5. proxy_cache_key "$host$request_uri $cookie_user";
  6. proxy_cache_key $scheme$proxy_host$uri$is_args$args;

缓存配置实践

  1. 缓存准备
系统 服务 地址
CentOS7.4 Nginx Proxy 192.168.69.112
CentOS7.4 Nginx Web 192.168.69.113
  1. web节点准备

    1. //建立相关目录
    2. [root@nginx ~]# mkdir -p /soft/code{1..3}
    3. //建立相关html文件
    4. [root@nginx ~]# for i in {1..3};do echo Code1-Url$i > /soft/code1/url$i.html;done
    5. [root@nginx ~]# for i in {1..3};do echo Code2-Url$i > /soft/code2/url$i.html;done
    6. [root@nginx ~]# for i in {1..3};do echo Code3-Url$i > /soft/code3/url$i.html;done
    7. //配置Nginx
    8. [root@nginx ~]# cat /etc/nginx/conf.d/web_node.conf
    9. server {
    10. listen 8081;
    11. root /soft/code1;
    12. index index.html;
    13. }
    14. server {
    15. listen 8082;
    16. root /soft/code2;
    17. index index.html;
    18. }
    19. server {
    20. listen 8083;
    21. root /soft/code3;
    22. index index.html;
    23. }
    24. //检查监听端口
    25. [root@nginx ~]# netstat -lntp|grep 80
    26. tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 50922/nginx: master
    27. tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 50922/nginx: master
    28. tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN 50922/nginx: master
  2. 代理配置缓存

  1. [root@proxy ~]# mkdir /soft/cache
  2. [root@proxy ~]# cat /etc/nginx/conf.d/proxy_cache.conf
  3. upstream cache {
  4. server 192.168.69.113:8081;
  5. server 192.168.69.113:8082;
  6. server 192.168.69.113:8083;
  7. }
  8. #proxy_cache存放缓存临时文件
  9. #levels 按照两层目录分级
  10. #keys_zone 开辟空间名, 10m:开辟空间大小, 1m可存放8000key
  11. #max_size 控制最大大小, 超过后Nginx会启用淘汰规则
  12. #inactive 60分钟没有被访问缓存会被清理
  13. #use_temp_path 临时文件, 会影响性能, 建议关闭
  14. proxy_cache_path /soft/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;
  15. server {
  16. listen 80;
  17. server_name 192.168.69.12;
  18. #proxy_cache 开启缓存
  19. #proxy_cache_valid 状态码200|304的过期为12h, 其余状态码10分钟过期
  20. #proxy_cache_key 缓存key
  21. #add_header 增加头信息, 观察客户端respoce是否命中
  22. #proxy_next_upstream 出现502-504或错误, 会跳过此台服务器访问下台
  23. location / {
  24. proxy_pass http://cache;
  25. proxy_cache code_cache;
  26. proxy_cache_valid 200 304 12h;
  27. proxy_cache_valid any 10m;
  28. add_header Nginx-Cache "$upstream_cache_status";
  29. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  30. include proxy_params;
  31. }
  32. }
  1. 客户端测试
  1. //
  2. [root@nginx ~]# curl -s -I http://192.168.56.11/url3.html|grep "Nginx-Cache"
  3. Nginx-Cache: MISS
  4. //命中
  5. [root@nginx ~]# curl -s -I http://192.168.56.11/url3.html|grep "Nginx-Cache"
  6. Nginx-Cache: HIT

缓存清理实践

如何清理proxy_cache代理缓存

1.rm删除已缓存数据

  1. [root@proxy ~]# rm -rf /soft/cache/*
  2. [root@proxy ~]# curl -s -I http://192.168.56.11/url3.html|grep "Nginx-Cache"
  3. Nginx-Cache: MISS

2.通过ngx_cache_purge扩展模块清理, 需要编译安装Nginx

  1. //建立对应目录
  2. [root@proxy ~]# mkdir /soft/src
  3. [root@proxy ~]# cd /soft/src
  4. //下载Nginx包
  5. [root@proxy ~]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
  6. [root@proxy ~]# tar xf nginx-1.12.2.tar.gz
  7. //下载ngx_cache_purge
  8. [root@proxy ~]# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
  9. [root@proxy ~]# tar xf ngx_cache_purge-2.3.tar.gz
  10. //编译Nginx
  11. [root@nginx src]# cd nginx-1.12.2/ && ./configure \
  12. --prefix=/server/nginx --add-module=../ngx_cache_purge-2.3 \
  13. --with-http_stub_status_module --with-http_ssl_module
  14. [root@nginx src]# make && make install
  15. //需要将上文的缓存proxy_cache.conf文件拷贝至源码包中, 并增加如下内容
  16. location ~ /purge(/.*) {
  17. allow 127.0.0.1;
  18. allow 192.168.69.0/24;
  19. deny all;
  20. proxy_cache_purge code_cache $host$1$is_args$args;
  21. }
  22. //检测配置重新加载
  23. [root@nginx conf.d]# /server/nginx/sbin/nginx -t
  24. [root@nginx conf.d]# /server/nginx/sbin/nginx -s reload

使用浏览器访问建立缓存

通过purge请求对应的缓存数据

再次刷新就会404因为缓存内容已清理

部分页面不缓存

指定部分页面不进行proxy_Cache缓存

  1. cat proxy_cache.conf
  2. upstream cache{
  3. server 192.168.69.113:8081;
  4. server 192.168.69.113:8082;
  5. server 192.168.69.113:8083;
  6. }
  7. proxy_cache_path /soft/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;
  8. server {
  9. listen 80;
  10. server_name 192.168.69.112;
  11. if ($request_uri ~ ^/(url3|login|register|password)) {
  12. set $cookie_nocache 1;
  13. }
  14. location / {
  15. proxy_pass http://cache;
  16. proxy_cache code_cache;
  17. proxy_cache_valid 200 304 12h;
  18. proxy_cache_valid any 10m;
  19. proxy_cache_key $host$uri$is_args$args;
  20. 'proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
  21. proxy_no_cache $http_pargma $http_authorization;'
  22. add_header Nginx-Cache "$upstream_cache_status";
  23. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  24. include proxy_params;
  25. }
  26. }
  27. //清理缓存
  28. [root@nginx ~]# rm -rf /soft/cache/*
  29. //请求测试
  30. [root@nginx ~]# curl -s -I http://192.168.69.112/url3.html|grep "Nginx-Cache"
  31. Nginx-Cache: MISS
  32. [root@nginx ~]# curl -s -I http://192.168.69.112/url3.html|grep "Nginx-Cache"
  33. Nginx-Cache: MISS
  34. [root@nginx ~]# curl -s -I http://192.168.69.112/url3.html|grep "Nginx-Cache"
  35. Nginx-Cache: MISS

缓存日志记录统计

  1. //修改/etc/nginx/nginx.conf中log_format格式
  2. log_format main '$http_user_agent' '$request_uri' '$remote_addr - $remote_user [$time_local] "$request" '
  3. '$status $body_bytes_sent "$http_referer" '
  4. '"$http_user_agent" "$http_x_forwarded_for"' '"$upstream_cache_status"';
  5. //修改proxy_cache.conf, 在server标签新增access日志
  6. access_log /var/log/nginx/proxy_cache.log main;
  7. //使用curl访问, 最后检查日志命令情况
  8. curl/7.29.0/url3.html192.168.56.183 - - [19/Apr/2018:11:48:43 -0400] "HEAD /url3.html HTTP/1.1" 200 0 "-" "curl/7.29.0" "-""MISS"
  9. curl/7.29.0/url2.html192.168.56.183 - - [19/Apr/2018:11:48:45 -0400] "HEAD /url2.html HTTP/1.1" 200 0 "-" "curl/7.29.0" "-""HIT"
  10. curl/7.29.0/url2.html192.168.56.183 - - [19/Apr/2018:11:48:46 -0400] "HEAD /url2.html HTTP/1.1" 200 0 "-" "curl/7.29.0" "-""HIT"

Nginx查看命中率

Nginx做缓存的更多相关文章

  1. Nginx做缓存服务器

    Nginx做缓存服务器 Nginx配置 1.主配置/etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; ...

  2. nginx的缓存服务

    都知道缓存的目的是为了减小服务端的压力,可以在客户端直接取到数据 客户端---------------nginx(代理缓存)------------------服务端 代理缓存的描述: 就是客户端发送 ...

  3. nginx添加proxy_cache模块做缓存服务器

    业务需求nginx对后端tomcat(静态文件)做缓存 减轻后端服务器的压力 # nginx-1.6.2.tar.gz  ngx_cache_purge-2.3.tar.gz #编译安装 ./conf ...

  4. nginx做负载均衡器以及proxy缓存配置 - SegmentFault

    nginx做负载均衡器以及proxy缓存配置 - SegmentFault nginx做负载均衡器以及proxy缓存配置

  5. nginx代理天地图做缓存解决跨域问题

    作为一个GISer开发者,天地图是经常在项目中以底图的形式出现,其加载地址如: 天地图矢量:http://t{0-6}.tianditu.com/DataServer?T=vec_w&x={x ...

  6. nginx做负载均衡配置文件

    nginx做负载均衡是在反向代理的基础上做的,代码如下: ## Basic reverse proxy server ## ## Apache backend for www.baidu.com ## ...

  7. 用nginx图片缓存服务器

    图片的存储硬件 把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很: 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能 ...

  8. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  9. nginx做yum源

    我这边环境是原先有个nginx只是做了代理转发,现在需要在通过nginx做yum源方便后期安装源 1.原先的配置代理转发,为不影响原先配置及端口,在http中最末尾加“include include ...

随机推荐

  1. es6 新增变量声明方式

    let 与 var var var声明的变量拥有全局作用域或者局部作用域 在全局中声明变量即为全局变量 在函数中声明变量即为局部变量 而var在使用过程中也逐渐暴露出许多问题 var的几大问题 变量提 ...

  2. centos7 防火墙的操作

    参考文章:http://blog.csdn.net/Joe68227597/article/details/75207859 http://www.cnblogs.com/cocoat/p/66054 ...

  3. HttpModule介绍

    https://cloud.tencent.com/developer/article/1347498 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了H ...

  4. 题解【AcWing275】[NOIP2008]传纸条

    题面 首先有一个比较明显的状态设计:设 \(dp_{x1,y1,x2,y2}\) 表示第一条路线走到 \((x1,y1)\) ,第二条路线走到 \((x2,y2)\) 的路径上的数的和的最大值. 这个 ...

  5. [转]Jarvis OJ- [XMAN]level2/3_x64-Writeup

    学弟写的挺好的,我就直接转过来了 原文链接:http://www.cnblogs.com/ZHijack/p/7940686.html 两道64位栈溢出,思路和之前的32位溢出基本一致,所以放在一起 ...

  6. WPF学习笔记五之MVVM

    1.概念 MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发.这三者之间的关系如下图所示 模型(Model) Model——可以理解为带有字段 ...

  7. 正则表达式过滤url请求

    过滤url中带reset的url请求 atgBusSignFilter.setSignUriRegex("^.*/reset/.*$")等价于 atgBusSignFilter.s ...

  8. Linux - Deepin Linux,intel无线网卡下载慢、不能跑满宽带的解决方案

    解决方案 将 /etc/modprobe.d/iwlwifi.conf中的11n_disable=1删掉,重启. 参考 https://bbs.deepin.org/forum.php?mod=vie ...

  9. AcWing 907. 区间覆盖

    //1.将所有区间按照左端点从小到大排序 //2.从前往后依次枚举每个区间 //首先选择能够覆盖左端点的区间当中右端点最靠右的端点 //在所有能覆盖start的区间当中,选择右端点最大的区间 //选完 ...

  10. 题解【洛谷P1841】[JSOI2007]重要的城市

    题面 题解 最短路图模板题. 介绍一下最短路图: 先对原图跑一边单源最短路,求出源点到每个点\(i\)的最短路\(dis[i]\). 接下来构建新图:对于一条边\((x,y,v)\),若\(dis[x ...