一、基于proxy_cache的缓存

worker_processes  1;

events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on; keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$upstream_cache_status"';
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_zone:50m inactive=1d max_size=1g;
#指定缓存文件路径选项只允许放在http标签下
#缓存文件名命名规则/usr/local/nginx/cache/c//b7f54b2df7773722d382f4809d650c server {
listen 80;
server_name localhost;
access_log logs/access.log main;
location / {
proxy_cache cache_zone;
proxy_cache_valid 5m; #缓存HTTP状态代码为200,301和302的数据,5分钟后不再找缓存里的数据
proxy_cache_valid 200 304 302 24h;
proxy_pass http://192.168.0.37/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Nginx-Cache "$upstream_cache_status"; #在http header上增加缓存命中显示
expires 30m; #设置浏览器缓存过期时间为30分钟
}
}
}

proxy_temp_path /usr/local/nginx/cache_temp;
#指定临时文件目录
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_zone:50m inactive=1d max_size=1g;
#设置Web缓存区名称为cache_zone,内存缓存为50MB,自动清除1天内没有被访问的文件,硬盘缓存为1GB。
#proxy_cache_path:表示缓存文件存放的路径,该路径是预先就要创建好的
#levels=1:2:设置在相对于path指定目录的第几级hash目录中缓存数据
#levels=1,表示一级hash目录,levels=1:2,表示两级hash目录,目录的名称是基于请求URL通过哈希#算法得到的
#keys_zone=cache_zone:50m:设置缓存区名称为cache_one,内存缓存为50MB
#inactive=1d:自动清除1天内没有被访问的文件
#max_size=1g:设置硬盘中缓存数据的最大缓存空间为1G

代理缓存参数
proxy_cache cache_zone;
#增加使用web缓存区cache_zone
client_body_buffer_size 512k;
#增加缓冲区代理缓冲客户端请求的最大字节数
proxy_connect_timeout 60;
#增加连接后端服务器超时时间
proxy_read_timeout 60;
#增加后端服务器响应请求超时时间
proxy_send_timeout 60;
#增加后端服务器发送数据超时时间
proxy_buffer_size 32k;
#设置代理服务器保存用户头信息的缓冲区大小
proxy_buffers 4 64k;
#proxy_buffers缓冲区,网页平均在64k以下的设置
proxy_busy_buffers_size 128k;
#增加系统繁忙时可申请的proxy_buffers大小(proxy_buffers*2)
proxy_temp_file_write_size 128k;
#增加proxy缓存临时文件的大小
proxy_cache_valid 200 301 302 24h;       #等于proxy_cache_valid 24h;(超过24h不再使用缓存中的数据)
proxy_cache_valid any 1m;
#proxy_cache_valid中使用any表示缓存所有其它proxy_cache_valid中未指定HTTP状态码的数据,时间为1分钟
#proxy_cache_valid 200 302 10m;
#proxy_cache_valid 301 1h;
#表示对返回状态码为200,302的响应数据缓存10分钟,对返回状态码为301的响应数据缓存1小时
$upstream_cache_status包含以下几种状态:
MISS:未命中,请求被传送到后端
HIT:缓存命中
EXPIRED:缓存已经过期请求被传送到后端
UPDATING:正在更新缓存,将使用旧的应答
STALE:后端将得到过期的应答
添加到http头中后通过curl或浏览器查看http header如下:
HTTP/1.1 200 OK
Date: Mon, 22 Apr 2013 02:10:02 GMT
Server: nginx
Content-Type: image/jpeg
Content-Length: 23560
Last-Modified: Thu, 18 Apr 2013 11:05:43 GMT
Nginx-Cache: HIT
Accept-Ranges: bytes
Vary: User-Agent
添加到nginx日志中
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" "$upstream_cache_status"';

二、基于proxy_store的缓存

worker_processes  ;

events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on; keepalive_timeout ; server {
listen ;
server_name localhost;
} location / {
root "/web1";
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path "/web1";
if ( !-f $request_filename )
{
proxy_pass http://192.168.0.37;
}
}
}

通过location的 if 条件判断驱动nginx代理服务器与后端服务器通信和web缓存;判断请求的资源在nginx代理服务器上是否存在,如果不存在就通过后端服务器获取数据,然后回传给客户端,同时使用proxy store进行缓存。
用户一访问的时候,主目录为/web1,如果里面没有用户需要的数据,就去代理取,然后缓存到自己的主目录,下次再访问同样的资源的时候,就能在缓存这里得到数据
创建文件夹:mkdir /web1
proxy store 与proxy cache的区别:proxy store不提供缓存过期更新,内存索引建立等功能,缓存文件一直会保存在本地磁盘中

参考链接:
           https://www.cnblogs.com/lemon-le/p/7804347.html

Nginx缓存的更多相关文章

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

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

  2. nginx缓存设置proxy_cache

    http://www.cnblogs.com/dudu/p/4597351.html http块: proxy_cache_path /tmp/cache levels=1:2 keys_zone=n ...

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

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

  4. nginx 缓存机制

    nginx 缓存机制   Nginx缓存的基本思路 利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容 Nginx服务器启动后,会对本地磁盘上的缓 ...

  5. Nginx 缓存参数

    看看这下面两个指令参数: ----------------------------------------------------------------- proxy_cache_path  /ho ...

  6. 分布式Nginx缓存清理(PHP的socket编程)

    最近,公司要使用康乐的几台自建CDN换成Nginx,在缓存配置上不会有很多的问题,纠结的问题是:Nginx的如何批量进行缓存清理 我们都知道Nginx提供了一个第三方的模块"nginx ng ...

  7. nginx缓存优先级(缓存问题者必看)

    接触nginx的兄弟或多或少都有遇到缓存问题,要么是nginx为什么不缓存,要么就是nginx缓存很快就失效等等问题,在网上找了一遍nginx缓存优先级的文章,大家可以参考下. 架构图client端  ...

  8. Nginx实现负载均衡&Nginx缓存功能

    一.Nginx是什么 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl ...

  9. 使用nginx缓存服务器上的静态文件

    一.nginx缓存的优点 如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力. 因为静态文件(比如css,js, 图片)中,很多都是不经常更新的.nginx使用proxy_cach ...

  10. nginx缓存设置(expires)

    一.expires功能说明 nginx缓存的设置可以提高网站性能,对于网站的图片,尤其是新闻网站,图片一旦发布,改动的可能是非常小的,为了减小对服务器请求的压力,提高用户浏览速度,我们可以通过设置ng ...

随机推荐

  1. if语句&switch&Scanner

    if流程控制语句: if 语句的用语法如下: if(boolean表达式){ //如果条件为true那么执行 } 只有条件为true时才会执行,否则执行if语句后面的代码. 实例代码: public ...

  2. PHP7的异常处理机制,set_error_handler和set_exception_handler方法介绍

    https://blog.csdn.net/zhang197093/article/details/75094816

  3. Django框架详细介绍---认证系统

    在web开发中通常设计网站的登录认证.注册等功能,Django恰好内置了功能完善的用户认证系统 1.auth模块 from django.contrib import auth 模块源码 import ...

  4. centos7 安装 redis-4.0.9

    下载地址:https://redis.io/download 下载 安装: $ wget http://download.redis.io/releases/redis-4.0.9.tar.gz $ ...

  5. sitecore8.2 基于相对路径查询item

    当前项目: bar (path: /sitecore/content/home/foo/bar) 查询: query:./child/grandchild 结果: grandchild (path: ...

  6. 使用StringEscapeUtils转义、反转义字符串

    使用commmons-lang.jar中的字符串转义工具类org.apache.commons.lang.StringEscapeUtils转义.反转义字符串,支持CSV.HTML.JAVA.Java ...

  7. 命令行创建cocos2d-x的工程

    1. 命令行创建cocos lua工程cocos new MyGame -p com.your_company.mygame -l lua2. 进入工程目录, 编译运行时库cocos compile ...

  8. oracle数据库,恢复到24小时内的数据

    因为更新的时候忘记添加条件,导致数据混乱. 用此方法,把数据恢复. --首先查询在某个时间点的数据 t_asn_dtl 为表名; SELECT * FROM t_asn_dtl AS OF TIMES ...

  9. vue-cli —— 局部修改Element样式

    最近在做vue项目时用到了Element,发现这玩意儿用起来很舒服,很新颖,上手也很快,而且效果足够酷炫.但是后面发现一个很大的问题,那就是Element的样式有限,这极大地限制了项目的应用广度,所以 ...

  10. java线程学习之Sleep方法

    sleep方法是在线程中常用到的一个方法,它是一个静态方法. sleep(long millis)       在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度 ...