image.png



nginx反向代理服务器+负载均衡

用nginx做反向代理和负载均衡非常简单,

支持两个用法 1个proxy, 1upstream,分别用来做反向代理,和负载均衡

以反向代理为例, nginx不自己处理php的相关请求,而是把php的相关请求转发给apache来处理.

image.png

----这不就是传说的动静分离,动静分离不是一个严谨的说法,叫反向代理比较规范.

 

反向代理后端如果有多台服务器,自然可形成负载均衡,

但proxy_pass如何指向多台服务器?

把多台服务器用 upstream指定绑定在一起并起个组名,

然后proxy_pass指向该组

 

默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.

也有其他负载均衡算法,如一致性哈希,需要安装第3方模块.

(自行预习nginx3方模块的安装,以安装ngx_http_upstream_consistent_hash为例)
反向代理导致了后端服务器的IP,为前端服务器的IP,而不是客户真正的IP,怎么办?






反向代理实例1:

image.png

重启nginx出现报错:

image.png

服务器只有一个路由条目,缺少默认网关,没有默认网关则114.114dns服务器就不可能被路由,所以要加上:

image.png

image.png

访问:

image.png

跳转到:

image.png

因为http跳转到https了,客户端(浏览器)一跳转,单独访问百度了:

image.png

加上s即可:

image.png

image.png






反向代理实例2:

image.png

image.png

(x-real-ip是自己取名,叫啥都行)

然后在服务端程序,获取到x-real-ip输出:

image.png(tomcat)

image.png(客户端/浏览器端ip:192.168.1.200)

用以上的方式(反向代理)可以进行动静分离,如:.jpg、.png等结尾的请求通过nginx反向代理访问其指定服务器,获取到服务器内容,再通过nginx返回给客户端








nginx在反向代理之上又有负载均衡的能力,一般一块用

官方说nginx可以并发5w,假设有50w并发的压力,可以用上LVS:

image.png


而LVS是四层,不会和客户端握手/连接,它只是转发数据包。假如后面跟的是ngxin服务器,这些nginx服务器的环境、配置、业务逻辑等是一样的

image.png

如果是DR模型,则可以服务端直接返回给客户端:

image.png

(注意:DR模型下,上面架构中的图像、声音、视频等不会直接返回给客户端,而是返回给nginx服务器,再由nginx服务器返回给客户端。nginx稍微不足的地方:没有能力让后端反向代理的服务器直接返回给客户端