前言
之前讲过Nginx的正向代理和反向代理,但是对于我们yum源代理,这肯定是不够的,最好是要能缓存资源。毕竟yum源的东西大部分都是静态资源,不会改变,如果能缓存这些资源,不仅能加快用户对资源的获取,另一方面也减少了出口流量和带宽。这其实也就是CDN的初衷了。
缓存配置
接下来就来说说nginx的缓存配置。不多说,直接上配置。
proxy_cache_path /cache/nginx/cache levels=1:2 keys_zone=yum:500m inactive=1000d max_size=80g;
server {
server_name www.baidu.com;
proxy_cache yum;
proxy_cache_valid 200 304 302 1000d;
proxy_cache_valid any 1m;
proxy_ignore_headers Set-Cookie;
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
proxy_hide_header Expires;
location / {
proxy_pass http://www.baidu.com/;
}
}
-
其中,
-
proxy_cache_path 表示系统缓存文件路径,该路径必须要先创建,才能使用,否则nginx启动会失败
-
levels 设置缓存文件目录层次,levels=1:2 表示两级目录
-
keys_zone 设置缓存名字和缓存共享内存大小
-
inactive 在指定时间内没人访问则被删除,默认是10min,这里设置为1000d,就是这么豪放,其实后面完全都可以取而代之,作为yum源了
-
max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源
-
proxy_cache 使用名为yum的对应缓存配置,与上面keys_zone设置的名字要一致
-
proxy_cache_valid 对指定http状态码的响应进行缓存时间设置,这里过期时间也设置为1000d,能用就用,就不要再回源校验了
-
proxy_ignore_headers 忽略源站http响应的某个头部字段,这里忽略的三个字段是为了保证缓存不过期,静态资源,没必要过期
-
proxy_hide_header 设置本端服务器与源站交互时不使用某个字段,同样也是为了保证缓存不过期
-
proxy_pass 设置我们要代理的服务器地址,即源站地址
后面几个忽略http响应头部字段是因为很多网站资源都设置不能缓存,或者设置过期时间,这样我们的代理服务器就没办法缓存,每次都要回源取,或者校验。如下图百度首页就设置了不允许缓存。
-
其中,
- private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户
- no-cache:指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用,也就是donot-serve-from-cache-without-revalidation
- no-store:缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息 另外,
- Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。