nginx反向代理服务器+负载均衡
用nginx做反向代理和负载均衡非常简单,
支持两个用法 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡
以反向代理为例, nginx不自己处理php的相关请求,而是把php的相关请求转发给apache来处理.
----这不就是传说的”动静分离”,动静分离不是一个严谨的说法,叫反向代理比较规范.
反向代理后端如果有多台服务器,自然可形成负载均衡,
但proxy_pass如何指向多台服务器?
把多台服务器用 upstream指定绑定在一起并起个组名,
然后proxy_pass指向该组
默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.
也有其他负载均衡算法,如一致性哈希,需要安装第3方模块.
(自行预习nginx第3方模块的安装,以安装ngx_http_upstream_consistent_hash为例)
反向代理导致了后端服务器的IP,为前端服务器的IP,而不是客户真正的IP,怎么办?
反向代理实例1:
重启nginx出现报错:
服务器只有一个路由条目,缺少默认网关,没有默认网关则114.114dns服务器就不可能被路由,所以要加上:
访问:
跳转到:
因为http跳转到https了,客户端(浏览器)一跳转,单独访问百度了:
加上s即可:
反向代理实例2:
(x-real-ip是自己取名,叫啥都行)
然后在服务端程序,获取到x-real-ip输出:
(tomcat)
(客户端/浏览器端ip:192.168.1.200)
用以上的方式(反向代理)可以进行动静分离,如:.jpg、.png等结尾的请求通过nginx反向代理访问其指定服务器,获取到服务器内容,再通过nginx返回给客户端
nginx在反向代理之上又有负载均衡的能力,一般一块用
官方说nginx可以并发5w,假设有50w并发的压力,可以用上LVS:
而LVS是四层,不会和客户端握手/连接,它只是转发数据包。假如后面跟的是ngxin服务器,这些nginx服务器的环境、配置、业务逻辑等是一样的
如果是DR模型,则可以服务端直接返回给客户端:
(注意:DR模型下,上面架构中的图像、声音、视频等不会直接返回给客户端,而是返回给nginx服务器,再由nginx服务器返回给客户端。nginx稍微不足的地方:没有能力让后端反向代理的服务器直接返回给客户端)
转载于:https://blog.51cto.com/5660061/2397640