Nginx专题之-搭建具备缓存的反向代理服务器(基于云服务器)

昨天我们介绍了Nginx作为静态代理资源的web服务器Nginx专题之-搭建可用静态资源web服务器(基于云服务器),我以这个为例子,我们再准备一台上游服务器(可以是tomcat、Apache等)。昨天咱们搭建的Nginx服务器作为反向代理服务器使用。为什么这么做呢,因为上游服务器需要处理复杂多变的业务逻辑,所以上游服务器的效能很一般,我们使用nginx作为反向代理后,可以由一台nginx请求按照负载均衡的算法代理给多台上游服务器。这样我们就可以在用户无感知的情况下,增加上游的业务服务器,做到水平扩展。当上流服务器出现了问题,Nginx可以自动的把有问题的上游服务器的请求转交给正常的服务器。

01搭建一个具备缓存功能的反向代理服务器

nginx对proxy的设置文档

Nginx的http_proxy模块,使用proxy_cache_path进行配置缓存功能。Nginx对访问过的内容会在Nginx服务器本地创建一个副本,在预设的时间段内再次访问该数据的内容,就不需要通过Nginx服务器反向代理向上游服务器发出请求,这样能够减少Nginx对上游服务器的请求,而减少网络流量,同时也减小了数据传输的延迟,提高了数据访问的速度。同时当后端服务器出现问题,Nginx服务器上的副本资源还能够将数据返回给客户端的请求,这样提高了服务器的可用性。但是缓存只针对一些不经常变化的资源(如:css,js,图片等)

nginx配置示例

首先准备好一台上游服务器(可以是tomcat,Apache等)添加上游的服务器到Nginx中在http块中添加upstream:upstream local {server 上游服务地址+端口 ;}可以添加多个上游服务器。在server->location块中添加缓存的参数:proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarede_for;proxy_passhttp://local;#local是咱们定义upstream的名称

http块添加缓存proxy_cache_path /tmp/nginxcacge levels=1:2 keys_zone=my_cache:10mmax_size=10g inactive=60m use_temp_path=off;#proxy_cache_path本地路径,用来设置Nginx缓存资源的存放地址#levels 默认所有缓存文件都放在同一个cache下,但是会影响缓存性能。所以会建立子目录存放不同的文件。#keys_zone 在共享内存中设置一块存储区域来缓存的key和metadate,nginx可以判断一个请求是否命中缓存。1m大概可以存储8000个key;10m可以存储80000个key。#max_size 最大缓存空间,如果不指定,会使用掉所有的磁盘空间。当达到配额后,会删除最少使用的缓存文件。#inactive未被访问在缓存中的保留时间,如果没有使用将被删除(默认是10分钟)。#use_temp_path 如果为off,nginx会将缓存文件直接写指定的缓存文件中,而不适用temp_path存储。建议为off,避免文件在不同目录下不必要的复制。在location开启缓存功能proxy_cache my_cache;#my_cache 是我们上面定义的proxy_cache_key $host$uri$is_args$args;#同一个url对不同用户展示的不一样的(用户变量放到key中,参数指明了哪个用户等)proxy_cache_valid 200 304 302 1d; #对响应码是200、304、302的资源,设置缓存时长1天。

02Nginx缓存的一些其他的说明

proxy_cache_use_stale增强容错能力上游服务器出现问题,nginx可以使用缓存内容来响应客户端的请求。多磁盘分割存储缓存使用Nginx,如果有多个硬盘,可以用来在多个硬盘之间分割缓存/path/hd1 keys_zone=my_cache1/path/hd2 keys_zone=my_cache2split_clients $request_uri $my_cache{50% "my_cache1";50% "my_cache2";}location / {proxy_cache $my_cache;}

声明:如有错误,请读者留言纠正。谢谢您提出的宝贵意见,我会及时修改。

举报/反馈