nginx的反向代理和负载均衡、nginx的IP透传
一、nginx的反向代理和负载均衡
1.七层代理
nginx反向代理分七层代理和四层代理。七层代理是在应用层实现,面向基于http协议的服务,后端服务一般是nginx,tomcat。七层应用层的代理在http模块内实现。
1)单纯的反向代理

2)七层反向代理并且负载均衡
Module ngx_http_upstream_module

upstream模块是nginx在编译的时候自带的(我这个nginx是自己编译安装的)

最基本的反向代理及负载均衡的实现
vim /apps/nginx/conf/nginx.conf

实现对多个服务的反向代理和负载均衡
vim /apps/nginx/conf/nginx.conf

vim /apps/nginx/conf/conf.d/upstream.conf

反向代理缓存功能:
在http模块中配置,在server或者localtion中调用


nginx自带健康性检查:
检就是查后端服务器有没有出现问题,如果这个服务器出现问题,就自动只把客户的请求转到其他可用的服务器上
2.四层代理
nginx的四层代理(运输层),基于tcp,udp协议,如果后端服务器是mysql,redis服务器,就可以基于tcp协议进行反向代理,如果后端涉及到dns解析就可以使用upd协议。
nginx的四层代理的模块要写在stream模块内。与http模块同一级别。

配置如下
vim /apps/nginx/conf/nginx.conf

3.负载均衡算法
轮询调度
负载均衡默认的是普通的轮询调度算法,单个权重是1,总权重是2,各占50%概率

hash算法
对cookie做hash运算得到一串字符,然后与权重进行模运算得到一个固定值,第一次随机调度到一个后端服务器,但是第一次确定之后,后面都会调度到这个机器。即相同的cookie会调度到通一个后端服务器上。(同理,也可对源ip等做hash运算进行调度)

cookie和session的作用
当一个服务需要用户发送姓名和密码验证身份的时候,用户先发送用户姓名和密码到服务器,然后服务器进行验证发现正确,与用户端建立一个会话session,然后会将验证身份成功的sessionid放到cookie里(一般是一串字符)返回给用户,下次用户再来携带这个cookie的时候服务器就知道是已经验证过身份的用户,无需再去认证。这个会话的持续时长由服务端去规定。用户的cookie过期后就需要重新登陆。
一致性hash算法
一致性hash,是让已经生成的hash字符串对2的32次进行取模,然后得到得范围十分的大,就近似为一个圆。
首先是让后端服务器的ip进行hash,然后对2的32次方取模。后端服务器都会在这个圆中有一个位置。然后调度服务器上假设是对客户端ip进行hash,客户端ip进行hash之后也与2的32次方进行取模。然后每一个客户端也会在圆上有一个位置,这个客户端离哪个服务端的位置近就,这个客户端的请求就会被调度到哪个服务端。


但是如果服务器最后hash后落的地址太近了就会导致分布不均匀,然后有些服务器上的客户多,有些服务器很闲。

解决方法:
可以让服务器,比如后端一个服务器192.168.75.133,让它绑定多个虚拟ip,然后让这些ip也hash然后取模落在圆上,然后如果客户端离哪个虚拟ip更近,就调度到哪个虚拟ip绑定的真实服务器上。
二、IP透传
IP透传只在haproxy和nginx反向代理的时候才有。lvs只能实现四层(传输层)的反向代理,在服务端可以直接看见客户端的IP,可以把lvs看作一个路由器。但是nginx和haproxy在七层(应用层),nginx会分别在客户端和服务器端建立tcp三次握手连接,在服务端如果不进行配置的话是只能看见代理器的IP。
代理服务器设置

服务器上设置

然后在服务器日志就能看见客户端ip

更多推荐


所有评论(0)