【原创】Java基础之Nginx缓存
1 proxy_ignore_headers
1.1 Set-Cookie
By default, nginx does not caches requests with Set-Cookie.
默认情况下:Nginx不会缓存response中带有Set-Cookie的请求;
If a header includes the “Set-Cookie” field, such a response will not be cached. Processing of one or more of these response header fields can be disabled using the proxy_ignore_headers directive.
这时需要使用proxy_ignore_headers指令;

Nginx会根据proxy_ignore_headers忽略resin返回的response中的相关的header;
proxy_ignore_header指令:

Disables processing of certain response header fields from the proxied server. The following fields can be ignored: “X-Accel-Redirect”, “X-Accel-Expires”, “X-Accel-Limit-Rate” (1.1.6), “X-Accel-Buffering” (1.1.6), “X-Accel-Charset” (1.1.6), “Expires”, “Cache-Control”, and “Set-Cookie” (0.8.44).
1.2 Cache-Control
Public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换)
根据什么能被缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
经测试,cache-control为private和no-cache时也不能生成缓存文件;
也需要使用proxy_ignore_header指令:

1.3 Expires
Parameters of caching can also be set directly in the response header. This has a higher precedence than setting of caching time using the directive. The “X-Accel-Expires” header field sets caching time of a response in seconds. The value 0 disables to cache a response. If a value starts with the prefix @, it sets an absolute time in seconds since Epoch, up to which the response may be cached. If header does not include the “X-Accel-Expires” field, parameters of caching may be set in the header fields “Expires” or “Cache-Control”.
Expires和Cache-Control会影响缓存的有效期,这个有效期默认是在配置文件中配置的:

除非确实想由resin来设置过期时间,也需要使用proxy_ignore_header指令:

经过以上三步配置后,nginx会忽略resin返回response中影响缓存是否生成以及缓存时间的header,缓存文件就可以正常生成;
2 proxy_hide_header
By default, nginx does not pass the header fields “Date”, “Server”, “X-Pad”, and “X-Accel-...” from the response of a proxied server to a client. Theproxy_hide_header directive sets additional fields that will not be passed.
由于第一次访问resin,resin会返回Set-Cookie:JSESSIONID=…,而nginx会将resin的返回原封不动的存为缓存文件:

打开缓存文件发现,第一行为乱码,可能是nginx控制缓存时间相关的字节,第二行为该缓存文件的KEY,下边就是一个完整的HTTP响应,包括完整的header和body,命中缓存的时候,nginx会将该响应直接返回而不再请求resin;
为了避免串Session的问题,需要增加proxy_hide_header指令:

来保证nginx在使用缓存的同时隐藏响应中相关header;
Proxy_hide_header指令:

详细请查看 http://wiki.nginx.org/HttpProxyModule;
3 memcached module
另外,nginx还有一个memcached模块也可以用来作为页面缓存,即Nginx / memcached module:
The Nginx / Memcached module allows you to setup the previous architecture, using Nginx as a HTTP reverse proxy, and Memcached as storage. (Note: memcached is often used as shared HTTP session storage)
The module Nginx memcached works very well. But it has a big limitation: it can not store HTTP headers with data. For example, pages served by Nginx via Memcached storage have the default Nginx Content-Type. Moreover, it is quite difficult to store multiple type of data in Memcached : CSS, JS, images, HTML, json … You can add some specifics HTTP headers, but only in Nginx configuration. These headers will be shared by every resources served by Nginx/Memached, unless you put lot of ugly “if” in the configuration.
使用memcached做页面缓存的话避免了使用proxy_cache在每台nginx上都有一份缓存的问题,而且purge的时候也更简单;
【原创】Java基础之Nginx缓存的更多相关文章
- [ 原创 ] Java基础3--Java中的接口
一.使用接口(interface)的目的 Java只支持单继承,即一个类最多只能继承一个直接父类,接口的主要功能就是可以实现类似于类的多重继承的功能. 二.接口的性质 1.接口具有继承性,即子接口可继 ...
- [ 原创 ] Java基础2--构造方法的继承和重载
1.构造方法的重载是指同一个类中定义不同参数的多个构造方法,已完成不同情况下对象的初始化. 例如: Point(); Point(x); Point(x,y); 2.一个类的若干个构造方法之间可以相互 ...
- [ 原创 ] Java基础1--Java中super和this的用法和区别
许多同学在学习Java时分不清楚this和super的用法和区别,今天偶然发现一片加精的博文,看完内容准备自己也写下来积累一下 1.如果想在子类的构造方法中调用父类的构造方法,必须在子类的构造方法中使 ...
- [ 原创 ] Java基础9--final throw throws finally的区别
final修饰的类不可被继承,final修饰的方法可以被继承但不能被重写(覆盖) final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖.不是方法的不可继承 throw是用来明确地抛出 ...
- [ 原创 ] Java基础8--什么叫做重载
重载是在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关,B中的参数列表和题目的方法完全一样了.
- [ 原创 ] Java基础7--Java反射机制主要提供了以下哪些功能?
AVA反射机制主要提供了以下哪些功能? 在运行时判断一个对象所属的类 在运行时构造一个类的对象 在运行时判断一个类所具有的成员变量和方法 在运行时调用一个对象的方法
- [ 原创 ] Java基础6--构造函数和抽象类的性质
构造函数的性质 // A.方法名与类名相同: // B.没有返回类型(例如return.void等):// C.不能被static.final.native.abstract和synchronized ...
- [ 原创 ] Java基础5--abstract class和interface的区别
1.含有abstract抽象修饰符的类就是抽象类.abstract 类不能创建实例对象 2.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不 ...
- 【原创】这道Java基础题真的有坑!我也没想到还有续集。
前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏 ...
随机推荐
- vue-判断设备是手机端还是pc端
经常在项目中会有支持 pc 与手机端需求.并且pc与手机端是两个不一样的页面.这时就要求判断设置,根据不同的设置跳转不同的路由. [代码演示] 在 router/index.js 中有两个页面. ex ...
- Android : 高通平台的HVX简介及调试
一.HVX简介 HVX(“Hexagon矢量扩展”,Hexagon-六边形.Vector-矢量.Extensions-扩展)是Hexagon 680 DSP的典型特性,能够在执行图像处理应用中的计算负 ...
- 数据分析 - pandas 模块
数据读取结构 - DataFrame Series (collection of values) DataFrame (collection of Series objects) Panel (co ...
- Java日志体系(六)log4j2
1.1 简介 log4j2,一个日志的实现框架,是log4j的升级版本,于2014年7月正式亮相.与第一代log4j不同,log4j2完全重写了log4j的日志实现,并不是在原有基础上进行的升级,解决 ...
- 在centos卸载mysql
1 rpm -qa|grep mysql 查看安装了哪些mysql和lib…… 1 yum remove mysql mysql-server mysql-libs compat-mysql51 删除 ...
- Unity小白文——单例的定义
当类继承与MonoBehaviour时 public class TestSingle : MonoBehaviour { public static TestSingle Instance; voi ...
- ASP.NET Core 入门笔记6,ASP.NET Core MVC 视图传值入门
摘抄自:https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc-view-renderdata.html 如有侵权请告知 一.前言 1.本教 ...
- linux 中的命令是什么?执行命令的几种方式?如何自己创建命令?
linux 中的命令是什么? 命令是可执行的二进制程序 执行命令的几种方式? ./test.sh #相对路径执行 /data/test.sh ...
- centos7搭建伪分布式集群
centos7搭建伪分布式集群 需要 centos7虚拟机一台: jdk-linux安装包一个 hadoop-2.x安装包1个(推荐2.7.x) 一.设置虚拟机网络为静态IP(最好设成静态,为之后编程 ...
- RAID冗余磁盘阵列的创建
RAID 0 :条带化,数据被拆分到多个驱动中,写速度最快,但并没有数据镜像或校验信息. RAID 1 :镜像化,完全磁盘镜像,在独立磁盘上创建数据的两份拷贝,这个级别提供最好的数据安全,但写速度慢. ...