上篇文章演示了,Nginx是如何做为一个静态服务器工作的;那么我们将这个服务器作为上游服务器;今天我们再搭建一个Nginx来作为反向代理,演示Nginx作为具有缓存功能的反向代理如何使用;
也就是说,使用nginx的两个功能:
- 反向代理
- 缓存
由于上游服务器要处理非常复杂的业务逻辑,性能可能比较低,使用Nginx作为反向代理以后呢,可以由一台Nginx,把请求按照复杂均衡算法,代理给多台上游服务器工作,这样我们就实现了水平扩展,在用户无感知的情况下,我们添加更多的上游服务器,来提升我们的处理性能。
而当上游服务器出现问题的时候,nginx可以自动的把请求,从有问题的服务器转交给正常的服务器来处理。
首先,我们需要将上一篇文章中的静态资源dlib服务做一定的修改,只能本机访问8080端口;因此,修改完nginx.conf的内容,如下:
接下来,我们使用OpenResty版本的nginx作为反向代理,因此,需要下载、安装此版本:
官网地址:
http://openresty.org/cn/linux-packages.html
OpenResty安装位置:
通过下面的命令,可以启动openresty版本的nginx
systemctl start openresty
因为nginx服务是部署在window下的虚拟机(centos7)里的, 因此需要在window下的hosts文件里,配置域名映射关系;
接下来,我们访问以下配置文件中定义的域名:
接下来重新看一下,proxy_pass的相关配置:
proxy_set_header 这个命令,起到什么作用呢?
因为有了一个反向代理,所以我们再获取一些变量或者一些值的时候,可能就会出问题;
比方说,一个tcp链接是由对端地址的,
但是有了反向代理以后,那么我们的反向代理与客户端是一个tcp链接,而反向代理与上游服务器又是另一个tcp链接,因此,如果取以前的变量remote_addr,
也就是tcp远端的连接地址,那么这个时候,在上游服务那里,取到的实际上是反向代理的地址,如果想获得浏览器的地址,作为限制浏览器访问速度等功能的一个作用时,其实是拿不到的,所以通过命令proxy_set_header命令,可以把一些值添加一条新的header,如X-Real-IP,发送到上游服务器;
host也是,用户访问的域名是直接在浏览器中输入的,我们即可以上游服务器来处理这个域名,也可以让反向代理处理域名
那么,proxy所有配置特性,可以在官网中查询,地址如下:
http://nginx.org/en/docs/
因为nginx作为反向代理的时候,通常只有动态的请求,也就是不同的用户,访问同一个url, 看到的内容是不同的,
这个时候,才会交由上游服务器处理,但是,可能会有一些内容在某段时间内是不变的,这个时候为了减轻上游服务器的压力,我们就会让nginx把上游服务返回的内容,缓存一段时间,比如一天,在一天之内,即使上游服务器对这个内容的响应发生了变化,也不处理;只会拿已经缓存的内容,向浏览器进行响应,因为nginx的性能远远领先与上游服务器的性能,所以对于小的站点会有大的性能提升
二、配置缓存功能
好的,接下来,我们演示一下,如何配置一个缓存服务器:
先进行缓存类型的设置,如下图所示:
那么如何使用刚才配置的缓存呢?
修改完成openresty版本的配置文件后,
重新启动openresty服务:
systemctl restart openresty
三、 验证缓存
接下来,开始验证,缓存是否起作用?
先关闭掉以前的静态资源服务:
/sbin/nginx -s stop
再刷新页面
(请注意:
如果以前的静态资源服务已经关闭了,请打开,然后访问一次静态资源,这样,缓存服务才能缓存静态资源; 然后,此时关闭静态资源服务,验证刚才配置的缓存是否有效果。)