访问我的博客

前言

本文介绍利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,前几篇文章介绍了 Nginx 的动静分离以及 CDN 技术,在其基础上,再对整个页面进行缓存,将大大提高服务器的负载能力。

基础环境

环境搭建

Nginx 与 nginx_ngx_cache_purge 下载解压

安装 wget

yum install wget

下载 Nginx

wget  http://nginx.org/download/nginx-1.12.1.tar.gz

解压 Nginx/usr/local/src/ 目录

tar -zxvf nginx-1.8.1.tar.gz -C /usr/local/src/

下载 ngx_cache_purge

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

解压到 Nginx 同一级目录

tar -zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/src/

目录结构为

---/usr/local/src
--nginx-1.8.1
--ngx_cache_purge-2.3

进入 Nginx 解压目录

cd nginx-1.8.1

安装必要依赖

yum -y install gcc pcre-devel openssl openssl-devel

检查安装环境,并指定将来要安装的路径和要安装的插件

./configure --prefix=/usr/local/nginx/ --with-http_realip_module --add-module=../ngx_cache_purge-2.3

参数说明:

--prefix: 将 nginx 安装到此目录

--with-http_realip_module 启用获取用户真实 IP 模块

--add-module=../ngx_cache_purge-2.3 添加 ngx_cache_purge 模块,用于缓存

进行编译安装

make && make install

编译完成后,没有出现 error 为编译安装成功

设置 Nginx 缓存

编辑 nginx.conf 配置文件

vi /usr/local/nginx/conf/nginx.conf

添加如下配置

# 需要在 /tmp 目录下创建 cache 文件夹!
proxy_cache_path /tmp/cache levels=1:2 keys_zone=tmpcache:200m inactive=10m max_size=5g; server {
listen 80;
server_name www.domain.com;#你的域名
charset utf8; 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-Up-Calling-Line-Id $http_x_up_calling_line_id;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; access_log logs/access.log main; location / {
proxy_pass http://127.0.0.1:8080;
#proxy_cache 的值是 proxy_cache_path 中的 keys_zone 的值
proxy_cache tmpcache;
#缓存 key 的值
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 301 5m;
proxy_cache_use_stale updating error timeout invalid_header http_500 http_502 http_503 http_504; expires 1m;
# 将缓存的状态添加到 Header 中
add_header X-Cache '$upstream_cache_status';
}
}

启动 Nginx

/usr/local/nginx/sbin/nginx

启动 Tomcat

可以使用自己的项目,或者使用我提供的项目来进行测试。

wget http://ojt4b2cr5.bkt.clouddn.com/SpringDemo.war

将下载的 war 包放到 Tomcat 的 webapps 目录下,启动 Tomcat。

测试 Nginx 缓存

缓存之前

查看 /tmp/cache 目录, 目录下面没有任何文件

修改本机(windows)的 hosts 文件,将配置的域名指向服务器 IP

192.168.200.129 www.domain.com

打开浏览器访问 www.domain.com/SpringDemo/testpage1

发现 X-Cache 的状态为 MISS ,说明没有缓存。

再次刷新页面后

X-Cache 的状态已经变成了 HIT

同时在服务器上查看 /tmp/cache 目录

cd /tmp/cache/

发现该目录下面已经多了文件目录,进去之后打开文件,发现正是刚刚访问页面的源码,说明 Nginx 的缓存已经配置成功了。只要是配置的域名下面的页面, 如果没有进行过滤,都会缓存到服务器。当第二次访问的时候,请求经过 Nginx 服务器时,Nginx 直接返回已经缓存的静态页面,这样将大大降低应用服务器 Tomcat 的负载。

需要注意的是:并不是该域名下的所有页面都需要进行缓存,如果缓存有误,会出现很严重的问题。比如不正确的将域名下的用户中心进行了缓存,当其他用户也进入页面的时候,显示的全部都是第一个进入该页面用户的信息。因此建议做缓存时,最好根据域名来做, 根据用户不同显示不同的页面的地址就不要做缓存。当然,如果接口地址规范,亦可以通过 Nginx 正则匹配路径的方式,只将某些匹配的路径做缓存。

Nginx缓存配置的更多相关文章

  1. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  2. Nginx缓存配置之手动清除缓存

    访问我的博客 前言 前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天. 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的 ...

  3. nginx缓存配置及开启gzip压缩

    阅读目录 一:nginx缓存配置 二:nginx开启gzip 回到顶部 一:nginx缓存配置 在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来 ...

  4. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  5. Nginx缓存配置以及nginx ngx_cache_purge模块的使用

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  6. nginx 缓存配置

    nginx 缓存是可以将远程服务器上的内容缓存到本地,可以设置缓存大小,缓存时间,缓存目录等等 具体配置如下 proxy_cache_path /home/http/cache/ levels=: k ...

  7. Nginx缓存配置指南

    1.如何配置基本缓存设置 开启简单的缓存配置,只需要两个指令:proxy_cache_path和proxy_cache.proxy_cache_path配置缓存的存放地址和其他的一些常用配置,prox ...

  8. Nginx缓存配置及nginx ngx_cache_purge模块的使用

    ngx_cache_purge模块的作用:用于清除指定url的缓存 下载地址:http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz   1. ...

  9. 网易技术分享:Nginx缓存引发的跨域惨案

    推荐:更多技术团队分享文章 关注:MAYOU18技术专栏 1. 前言 贵金属wap版直播间上线后,偶尔有用户反馈,在进入wap直播间的时候,出现空白页面,但是重新刷新又可以正常显示了.我们曾一度认为是 ...

随机推荐

  1. 第一章javascript词法结构笔记摘要

    语法介绍 javascript最流行的脚本语言,用于web和HTML,服务器.pc.移动端 轻量级语言,可以插入HTML页面,由浏览器按编写顺序执行 一.字符集 用Unicode字符集编写,是ASCI ...

  2. 发邮件、排序、FIFO

      发送邮件.py:   import smtplib from email.mime.text import MIMEText   def email(receiver, title='标题', b ...

  3. hive函数 parse_url的使用

    hive提供了直接处理url的函数 parse_url desc funtion 的解释是: parse_url(url, partToExtract[, key]) - extracts a par ...

  4. Class AB与Class D功放

    D类功放   又称之为数字功放,其特点是,工作效率高,体积小. D类功放的结构       第一部分为调制器,最简单的只需用一只运放构成比较器即可完成.把原始音频信号加上一定直流偏置后放在运放的正输入 ...

  5. DB2 Sql性能查看与优化

    1.执行次数最多的TOP10SQL"db2 "select * from sysibmadm.snapdyn_sql order by NUM_EXECUTIONS desc fe ...

  6. maven-java包管理工具-01

    maven只用来管理java项目,也是用java开发的 传统的项目因为包的管理有很多问题,所以才有的maven的诞生: 1. 项目开始的时候,确定项目中可能要使用到的包,然后下载包,复制粘贴到项目里面 ...

  7. 通过EntityFramework操作sqlite(DbFirst)

    记录一下通过 EntityFramework6 来操作sqlite过程 环境: visual studio 2017 .net 4.5 Console Application(项目类型) sqlite ...

  8. Quartz是一个任务调度

    这段时间做一个案子,用到每天定时处理事件,之前的解决思路是通过一个定时器轮询时间段,这样不能精准的在某个时间戳上执行动作.由于没有用过Quartz是一个任务调度,一直使用这个办法,今天通过同事提点,从 ...

  9. 题解 P5091 【【模板】欧拉定理】

    欧拉定理:若 \(gcd(a,n)=1\),\(a^{\varphi(n)}\equiv 1(mod\ n)\) 设 \(1\sim n-1\) 中与 \(n\) 互素的 \(\varphi(n)\) ...

  10. java的基本数据类型--四类八种

    java的数据类型 1.分为基本数据类型和引用数据类型 基本数据类型的分类:整数型: byte  占用一个字节 范围-128-127 short 占用两个字节  -2^15~2^15-1 int    ...