反向代理 | |
负载均衡器 | Web节点前边的设备为负载均衡器 作为负载均衡器的开源产品常见的有三类:LVS,Nginx,Haproxy。 LVS四层负载均衡,Nginx七层负载均衡,Haproxy四七都有。 四层七层遵顼的就是OSI网络模型 |
LVS | 工作在传输层,拆掉MAC和IP头部,读取TPC头部信息。 通过修改MAC和IP头部来达到负载均衡的目的。
由于本身只有四层功能,所以无法查看或修改原始数据,因此,LVS的负载均衡功能无法对数据包本身的原始数据做任何修改,只是纯最意义上的数据包转发功能。所以,LVS是通过转发数据包来实现的负载均衡的功能。 思考:修改MAC头部和修改IP头部的目标IP有什么区别? 修改MAC实现转发,意味着后方的Web节点必须和LVS服务器处于同一网段;修改IP实现转发,意味着后方的Web节点可以和LVS不在同一网段。 建立连接需要经过三次握手,那么LVS转发甚至连三次握手都可以转发,因此用户虽然目标IP为LVS,但是真正和用户握手的目标是后方的某个Web节点。建立了数据连接的Web节点会直接处理用户的数据请求,不会再经过LVS负载均衡器。 |
转发 原理 |
因此,每次数据包只经过一次LVS,由于LVS是纯粹的转发数据包 ,不对数据包做任何改变,进入到四层就出来了,因此VLS的转发效率极高,对服务器的资源占用很小,并且数据包只经过一次LVS,对LVS服务器造成的压力就很小,因此LVS可以支持很大的并发空间,一般可以支持三十万左右并发。 总结:LVS四层结构的负载均衡器,是通过转发来实现的负载均衡功能,不会对数据包做任何修改。 |
Nginx 七层反向代理 | 为何叫反向代理而不是负载均衡? Nginx是通过反向代理实现了负载均衡的功能。所谓七层,意味着nginx可以修改用户数据包的原始数据。 所谓代理,代替用户===>发起请求。
从nginx出来后,所有源变成nginx自己,代替用户发起请求。 用户发给代理,代理转给Web,Web回给代理,代理回给用户。 所以nginx本质是通过代理实现的负载均衡功能,代替用户发起请求完成用户的访问。 由于Nginx是七层结构,数据包要经过七层代理出去,因此对服务器的资源占用较大,并且一个请求的数据包要两次经过Nginx,因此更会拖累Nginx的处理效率。一般Nginx最大可以支持三万的并发。效率远低于LVS。 |
LVS与nginx | LVS四层功能单一,只能转发,然而Nginx七层意味着还可以进行用户的URL过滤。例如:location 反向代理实现负载均衡: http{ upstream www_pool { //负载均衡池名字 server IPA:端口 参数(weight=1); //权重值,是指我们的负载均衡池是权重轮询。轮询就是1:1的关系,用rr表示,每个节点负载一次;权重轮询,根据权重值按比例分配,用wrr表示,如果上面是1,下面是2,那么就是上面执行一次,下面执行两次。默认1:1。 server IPB:端口 weight=1 nax_fails=1 fail_timeout=10; } server{ listen 80; location / { proxy_pass http://www_pool //根据需求推送负载均衡池名字 } } } //反向代理推送的是请求,所以要加http 用户的请求发送到server,然后server将其推送到负载均衡池,由负载均衡池进行选择要发送到的IP、端口。 nax_fails:默认值,针对后方检测,如果后方节点坏了,可以被检测出来,出现错误后,不会再将错误结果带给后方节点。 |
负载据均衡搭建 | |
1. | 部署两台服务器,用来当Web节点,每台服务器上都需安装nginx;再部署一台ngxin服务器用来做nginx代理。(可以正常访问网页即可) 记得部署完nginx后,再每台服务器的/etc/hosts添加自己的ip和域名,用于访问,否则自己不能使用crul命令进行解析。
两台Web节点都能访问网页,拥有自己的IP
负载均衡器IP为200.4,映射的/etc/hosts为自己即可。 |
2. | [root@Nginx ~]# cd /usr/local/nginx/conf/ //进入nginx配置目录 [root@Nginx conf]# vim nginx.conf //修改主配置文件
用户访问域名进入负载均衡器,先进入server模块,然后再进入location,被推送到了xiaofa负载均衡池,由负载均衡池进行访问Web服务器的推送分发
由于是rr,也就是1:1轮询关系,所以每个节点推送一次。
修改后重启服务:nginx -s reload
由于是wrr,权重轮询按比例分配,先执行一边最后的,然后再按比例进行轮询。 |
3. | [root@Nginx conf]# vim nginx.conf //修改主配置文件
用户访问网页,通过负载均衡器中的server模块交给location模块进行匹配,匹配到合适的内容后,按照其对应的负载均衡池中的ip进行Web节点的推送 添加一个负载均衡池,并添加新的location模块,指定匹配字符upload [root@Web2 ~]# cd /usr/local/nginx/html/www/ //进入Web2服务器的www目录 [root@Web2 www]# mkdir upload //创建一个upload目录 [root@Web2 www]# cd upload/ //进入upload目录 [root@Web2 upload]# echo "I am upload" > index.html //创建一个网页 [root@Nginx conf]# curl www.xiaofa.com/upload/index.html //在Nginx负载均衡器上测试 根据不同的location情况,我们可以将其推送到不同的负载均衡池。
|
但是我们访问的www.xiaofa.com,再访问其他域名,回馈的依旧是www,这是为什么?
如果我们将IP写成域名,那么本机就需要做映射,但是映射是一对一的关系,没办法实现多对一(即一个IP多个域名访问)。所以在负载均衡池只能写IP。 | |
用户将请求给反向代理后,用户的报文中有一个变量hosts,里面保存的是域名,但是通过代理发出后的包里域名变成了IP。那么我们只要将用户报文中的域名取出,覆盖到Nginx报文中,用域名覆盖IP。 在配置文件添加:proxy_set_header host $host; proxy_set_header X-Forwarded-For $remote_addr; 第一个host是代理发起请求的hose,第二个host是用户发来的请求报文里的host,取用户发起报文里的host赋给代理将要发起报文host里的值,进行域名传递。 | |
1. | [root@Nginx conf]# vim nginx.conf //修改主配置文件
[root@Nginx conf]# nginx -s reload //重启服务
域名传递成功 |
[root@Web1 logs]# cat access.log //查看Web1节点访问日志
在Web的访问日志中,记录的访问域名的设备的IP地址。但是,用户是通过代理进行转发访问的,所以记录的都是LB的地址,但是我们分析是需要分析用户的IP地址。 在主配置文件中添加: log_format main ‘$remote-addr-$remote-user[$time_local]“$request”’ ‘$status $body_bytes_sent “$http_referfer”’ ‘“$http_user_agent”“$http_x_forwarded_for”’; RS为real server是真实的服务器,也就是后方节点 | |
1. | [root@Web1 conf]# vim nginx.conf //修改主配置文件,编写日志格式化
[root@Web1 conf]# vim conf.d/www.cnf //进入www配置文件进行修改
[root@Web1 conf]# nginx -s reload //重启服务 [root@Web1 nginx]# cd logs/ //进入logs日志目录
在负载均衡器上进行访问测试
[root@Web1 logs]# cat access_www.log //在Web节点上查看访问日志
最后的“-”为空,在用户发来的报文里,有个字段叫做remote_addr,这 个字段记录了用户的来源IP,我们将其赋值给这个空字段,让该字段有值,就可以达到记录用户IP的操作。 [root@Nginx conf]# vim nginx.conf //进入负载均衡器配置文件进行修改
添加一个改内容,其含义为:用户请求报文里的remote_addr将值赋给X-Forwarded-For这个变量。从而将用户IP赋到了新字段里 [root@Nginx conf]# nginx -s reload //重启服务 [root@Web1 logs]# tail -f access_www.log //动态追踪access_www.log日志中的内容 //在Ngxin代理进行访问测试 //获得IP //在C盘的Windows\System32\drivers\etc路径下的hosts文件中,添加映射 映射的IP为负载均衡器nginx的地址 //浏览器访问
//获得用户的IP网关地址,也可以在配置文件,将获得IP这条命令往前移,使看的更加清晰。 |
Linux基础——Web(三)Nginx反向代理1
最新推荐文章于 2023-01-29 15:08:31 发布