第十一讲:用Nginx搭建一个具备缓存功能的反向代理服务
之前向大家演示了Nginx怎样作为一个静态Web资源服务器工作;我们将以这个作为例子;把这个静态资源Web服务器作为上游服务器;再搭建一个Nginx作为反向 代理;然后向大家演示Nginx作为反向代理应该怎么使用,由于上游服务要处理非常复杂的业务逻辑而且强调开发效率;所以它的性能并不怎么样;我们使用Nginx作为反向代理以后尼,可以由一台Nginx把请求按照负载均衡算法代理给多台上游服务器工作;这样我们就实现了水平扩展,在用户无感知的情况下,我们添加更多的上游服务器;来提升我们的处理性能;而当上游服务器出现问题的时候,那么Nginx可以把请求从有问题出现灾难的服务器转交给正常的服务器;
如下之前的静态Web资源服务器

把这个Nginx静态资源Web服务器变更为上游服务器,而上游服务器通常公网是不提供访问的;这个时候我们可以做一个非常简单的操作;这个简单的操作就是listen监听8080端口的时候前面加一个ip地址,比如127.0.0.1:8080;表示只能本机的进程才能访问8080端口;

此时,先把原先的nginx进程停掉;再重新打开Nginx 防止之前打开的端口仍然可以使用;

此时页面已经无法访问了,Nginx拒绝了浏览器访问的连接;
现在我们开始搭建一个Nginx反向代理,之前的静态资源Web服务器使用的是Nginx1.14.2版本,而反向代理尼我们用openresty;
我们首先添加个upstream

也就是说我们上游服务其中一台server为127.0.0.1:8080;
如果有许多台上游服务,可以依次的放到这里;
我们可以配置Nginx选用哪种算法去选用一台上游服务;那么upstream定义的这一批服务器,我们给他个命名,比如这里命名为local;解下来我们做一个简单的配置;
对所有的请求我们把它通过proxy_pass 这条指令代理到我们刚刚配置的上游服务里;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_cache my_cache;
#proxy_cache_key $host$uri$is_args$args;
#proxy_cache_valid 200 304 302 1d;
proxy_pass http://local;
}

保存退出配置文件,接下来我们来看下效果:

默认为80端口,并且响应server为openresty/1.13.6.2 为反向代理的服务,而不是上游nginx1.14.2编译的;
proxy_set_header 参数特性详解:
当我们的nginx作为反向代理的时候;通常只有动态的请求;也就是不同的用户访问同一个url,看到的内容是不同的,这个时候才会交给上游服务去处理;但是有些内容是一段时间不会发生变化的;这个时候为了减轻上游服务的压力;我们就会使Nginx让上游服务返回的内容缓存一段时间,比如缓存一天;在一天之内即使上游服务对这个响应的内容发生改变我们也不管,我们只拿缓存住的内容向浏览器发送响应;因为Nginx的性能远远领先于上游服务器的性能;所以使用这样一个性能以后,对于我们一些小的站点会有一个非常大的性能提升;下面我们来演示一下,怎么样来配置一个缓存服务器;
配置缓存服务器,首先我们需要通过proxy_cache_path 这条指令去配置我们的缓存参数;
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g
inactive=60m use_temp_path=off;
配置参数的使用:做缓存的url路径下设置proxy_cache
proxy_cache my_cache;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 302 1d;

先访问站点 然后把上游服务停掉,再去访问,发现停掉上游服务之前访问过的文件还能访问,这些能访问的数据就是从缓存里读取响应的;

浙公网安备 33010602011771号