第十一讲:用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;

  

 

 

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

 

 

 

 

 

 

 

posted @ 2020-03-05 17:34  痞子胥  阅读(207)  评论(0)    收藏  举报