反向代理与代理缓存的设置

什么是反向代理?

先说一下什么是正向代理吧。
正向代理是代理的客户端。比如我们访问米国的网站,一般是需要挂vpn才能访问的,vpn的作用是从我们的本土ip转到米国的ip,通过米国的ip再访问,等于中转了一层,但客户端并未感觉到,这就是正向代理。
那反向代理呢?反向代理就是代理服务器。我们访问一个网站,可能后面是多台服务器做的支持,请求被平均分配到各台服务器下去处理(负载均衡),但客户端并未感觉到,这就是反向代理。
好啦,说了这么多,看看如何实现吧。

nginx.conf

worker_processes 1;#进程数,一般是多少核就设置几个,默认是1
events {
  worker_connections  1024;  #最大连接数
}
http {
  upstream  node_server_pool {   #建立服务器池
      server localhost:3000;
      server localhost:3001;
  }
  server{
    listen    80;#监听端口号
    server_name  localhost;  #主机名
    location /  {
      proxy_pass  http://node_server_pool;  #反向代理
     }  
  }

}

从客户端来看,我们只并不知道3000和3001端口,只需访问80端口,也就是http://localhost即可。

server.js

写个node脚本做server。

require('http').createServer(function(req,res){
    res.end('hello'+process.argv[2])
}).listen(process.argv[2])

起两个端口号做服务器池:

>node server.js  3000
>node server.js  3001

然后再用客户端做测试,多次执行curl:

>curl localhost
>curl localhost
>curl localhost
>curl localhost
...

测试结果:

hello 3000
hello 3001
hello 3000
hello 3001
...

请求被均衡分配到两台服务器下面了。

反向代理如何做缓存?

这是个比较实际的问题。
请求进来后经过nginx都转发到下面其他的机器去了,缓存怎么搞呢?
很明显,缓存内容应该是放在nginx所在的那台主机的内存下,一旦命中可以直接返回缓存内容,避免继续穿透。
我们可以开启代理缓存proxy_cache选项来解决这件事。

proxy_cache  zone|off

proxy_cache默认是off关闭的,zone表示处理缓存的内存区域名称,比如:

proxy_cache hello_my_zone

这代表代理缓存开启,内存会划出一块命名为hello_my_zone的区域,专门处理缓存。
不过需要注意的是:
当检测到请求头Cache-Control为no-cache时,代理缓存就不会生效了。
开启了proxy_cache还不够,还需要定义一下缓存内容的存放路径。
语法:
proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]
实例:

proxy_cache_path /data/nginx_cache/  levels=1:2 keys_zone=hello_my_zone:10m inactive=300s max_size=5g use_temp_path=off;

解释:
path设置缓存数据存放的路径;
levels设置目录层级,如levels=1:2表示两级子目录;
keys_zone表示内存的名字和大小,如keys_zone=hello_my_zone:10m,表示划出内存hello_my_zone是10m空间;
inactive是设置缓存多久失效,当硬盘上的缓存数据在该时间段内没有访问过,就会失效,该数据就会被删除,默认是10s;
max_size设置硬盘中最多可以缓存数据的大小,如果到达这个值,nginx会删除部分访问的数据;
use_temp_path为off时,表示不用临时存放缓存。
注意:
cache内存空间一般不会设置的太大,这块内存只是用来读取缓存目录的文件罢了。
我们把前面的反向代理配置加上代理缓存:

worker_processes 1;#进程数,一般是多少核就设置几个,默认是1
events {
  worker_connections  1024;  #最大连接数
}
http {
  upstream  node_server_pool {   #建立服务器池
      server localhost:3000;
      server localhost:3001;
  }
  #缓存文件的路径设置
  proxy_cache_path /data/nginx_cache/  levels=1:2 keys_zone=hello_my_zone:10m inactive=300s max_size=5g use_temp_path=off;
  server{
    listen    80;#监听端口号
    server_name  localhost;  #主机名
    location /  {
      proxy_cache  hello_my_zone;#开启代理缓存
      proxy_pass  http://node_server_pool;  #反向代理
     }  
  }

}

随着存储的缓存内容不断增多,可能会有磁盘不够用的现象,这时可以采用分割磁盘的方式解决:

worker_processes 1;#进程数,一般是多少核就设置几个,默认是1
events {
  worker_connections  1024;  #最大连接数
}
http {
  upstream  node_server_pool {   #建立服务器池
      server localhost:3000;
      server localhost:3001;
  }
  #缓存文件的路径设置
  proxy_cache_path /path/cache/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g inactive=60m use_temp_path=off;
  proxy_cache_path /path/cache/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g inactive=60m use_temp_path=off;
  #分割文件
  split_clients $request_uri $my_cache {
    50%   "my_cache_hdd1";
    50%   "my_cache_hdd2";
}
  server{
    listen    80;#监听端口号
    server_name  localhost;  #主机名
    location /  {
      proxy_cache  $my_cache;#开启代理缓存
      proxy_pass  http://node_server_pool;  #反向代理
     }  
  }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容