当前位置:C++技术网 > 资讯 > nginx负载均衡的配置的实战说明

nginx负载均衡的配置的实战说明

更新时间:2018-08-11 20:29:54浏览次数:1+次

        在开始说之前,又得吐槽一下,搜索引擎搜出来的关于“NGINX 负载均衡的配置失败”的文章,得到的是千篇一律的讲nginx配置方法,都不谈失败的现象和处理办法。感觉他们都是神,都不会遇到问题的。这些文章一遍一遍的抄一遍一遍的转载,简直就成了垃圾。说明这些搜索引擎垃圾的要死。

        不说了,开始说正事。先来看配置负载均衡的两个错误图:

    1.无效的主机名

    无效的主机名

    2.502网关错误

    502网关错误

        为什么我一操作,啥问题都来了。为什么别人就没有?我想很多人都会问这样的问题。其实吧,抄袭博客,太容易,还显得逼格高。而真正遇到问题解决了问题,竟然都懒得写博客。哎~~所以看似很多资料,其实很多都是翔。

        根据遇到的问题,我整理了几个新手配置nginx的负载均衡的问题,希望可以帮助到大家。

    1.防止负载均衡时分发请求的死循环

        当出现了死循环的时候,通常在NGINX的错误日志里(/usr/local/nginx/logs/error.log)有这样的提示:

    2018/08/09 15:00:58 [alert] 8142#0: 1024 worker_connections are not enough
2018/08/09 15:00:58 [error] 8142#0: *2038 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 47.104.241.85, server: dx.w3tong.com, request: "GET / HTTP/1.0", upstream: "http://47.104.241.85:80/", host: "backend"

        这个错误说明了nginx的设置的最大连接1024都已经不足了。也只有在死递归或死循环才会短时间一下用完了连接数。然后后面显示是在负载均衡的请求分发时报的错误。然后浏览器报了一个“502 Bad Gateway”错误。至于为什么出现这个问题,以及如何解决这个问题,再后面的几个说明里会说明。

    2.分发的地址必须直接可以使用

        当分发出现4xx错误时,是因为请求的地址无法访问造成的。此时先要确定的问题时,我们能不能直接访问这个地址。此时浏览器返回的提示就是“Bad Request - Invalid Hoatname”。如果直接访问都有问题,那还负载个什么鬼。可能造成无法访问的原因,一方面是服务器本身的地址不存在,还有一个容易忽略的问题就是,服务器提供商的后台会对服务器的安全进行限定,需要开启对应的端口,否则无法访问。一般在服务商后台(如阿里云)的控制台里的服务器的安全组列表加入一个端口允许即可。

    

    

    3.域名和ip是同等效用

        在多次出现问题后,开始怀疑nginx的负载均衡里的分发的地址里IP和域名是否等效。验证之后发现是等效的。但是还是有区别的。这在后一个说明里再进一步说明。域名会自动被解析为IP,而IP则直接使用。然后加上端口号。如果没有端口号,就是默认的80.

    

    4.负载均衡不支持域名的自动区分

        虽然域名和IP等效,却因此给我们带来了困扰。我们在配置多个虚拟主机服务器的时候,可以用域名+端口来区分多个虚拟主机。所以我们在负载均衡的分发地址列表里会误以为填写域名会自动解析,因此可以利用域名+端口来区分多个虚拟主机。然而并不行!!域名在这个列表里会被解析为IP后才执行。也就是说,分发后是按照IP+端口来进行处理的。所以这里是根据端口来区分的。如果你用IP+端口来配置虚拟主机了,同样的域名也只能解析为同样的IP。两个相同的IP+端口得到相同的主机。如果配置了多个同样的端口,只是域名不一样,那么在分配服务器的时候,我们不能指定这个端口作为分发的端口,否则分发的时候不知道分给哪个虚拟主机,结果是无法预料的,通常是工作不正常的。典型的例子就是80端口。不是不能用,只是我们不能有多个相同的端口在处于监听的状态。所以网上的例子都没有用80端口,却没有任何说明。

        而前面的死循环导致的502错误,就是因为分发时指定了80端口,而当前网址也是80端口。当80端口被访问后,就进去分发,然后又发给了80端口,然后再分发。每一次分发请求,服务器被请求一次,然后一直循环下去,1024次后,我那个服务器就连接不足了,然后就报错了。这一点是非常重要的一点,新手压根搞不清楚负载均衡的分发原理。

    

    5.提高负载均衡的访问效率

        负载均衡的服务器如果使用的云服务器在同一个局域网内,那么我们就可以使用局域网来进行负载均衡的配置。如果我们在配置的时候都是用公网IP来分配服务器,那么每一次请求都是走公网路线,必然会比较耗时。而如果是使用内网IP(即局域网IP),那么分配的时候都是走局域网路线,会很快就返回结果。这样的效率会非常高,不占用外网宽带,体验很好。然而这个很多文章都没有提及。

    

        知其然知其所以然。希望大家在分享经验的时候,不要抄袭。更要负责任。