访问我的博客

前言

本文介绍利用 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. 图像像素转换 8-bit 16-bit 32-bit游戏效果

    https://www.ipcfun.com/8bit-you-xi-hua-mian-fu-yuan-3d-li-ti-tu.html https://bbs.csdn.net/wap/topics ...

  2. spring处理线程并发

    http://www.open-open.com/bbs/view/1320130410702

  3. 2.Django模型

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  4. 1.html基础

    认识html 1.1 Hyper   text  markup   language 超文本标记语言. 超文本:超链接.(实现页面跳转) Html结构标准 < ! doctype html> ...

  5. unidbgrid单元格操作

    unidbgrid单元格操作 //GRID里回车替换TABfunction cellkeydown(sender, td, cellIndex, record, tr, rowIndex, e, eO ...

  6. Spring Security Hello World Example--reference

    In this tutorial, we will see how we can use Spring security to protect specific resources. This Hel ...

  7. Docker 持续集成初次体验

    背景 在家的时候,实在不想做其他的,想起之前参加的一场关于docker的座谈会,于是想搞以下docker. 开始 在道客云上搞了一下持续集成,总体来说,比较好用的. 写了一个Go程序,就是之前写的发邮 ...

  8. AngularJs自定义过滤器filter

    AngularJs自带有很多过滤器,现在Insus.NET演示一个自定义的过滤器,如实现一个数据的平方. 本演示是在ASP.NET MVC环境中进行. 创建一个app: 创建一个控制器: 接下来是重点 ...

  9. 【算法python实现】 -- 最大子序和

    原题:https://leetcode-cn.com/problems/maximum-subarray/ 问题描述: 输入:[-2, 1, -3, 4, -1, 2, 1, -5, 4], 输出:6 ...

  10. 【062有新题】OCP 12c 062出现大量之前没有的新考题-16

    choose one Which users are created and can be used for database and host management of your DBaaS da ...