nginx负载均衡器的作用(Nginx 负载均衡是什么以及该如何配置)
nginx负载均衡器的作用
Nginx 负载均衡是什么以及该如何配置什么是负载均衡负载均衡主要通过专门的硬件设备或者通过软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本比较高。通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法也是多种多样的,常见的有两大类:即静态负载均衡算法和动态负载均衡算法。静态算法实现比较简单,在一般网络环境下也能达到比较好的效果,主要有一般轮询算法、基于比率的加权轮询算法以及基于优先级的加权轮询算法等。动态负载均衡算法在较为复杂的网络环境中适应性更强,效果更好,主要有基于任务量的最少连接优先算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。
网络负载均衡技术的大致原理是利用一定的分配策略将网络负载平衡地分摊到网络集群的各个操作单元上,使得单个重负载任务能够分担到多个单元上并行处理,或者使得大量并发访问或数据 流量分担到多个单元上分别处理,从而减少用户的等待响应时间。
Nginx服务器负载均衡配置Nginx服务器实现了静态的基于优先级的加权轮询算法,主要使用的配置是proxy_pass指令和upstream指令,这些内容实际上很容易理解,关键点在于Nginx服务器的配置灵活多样,如何在配置负载均衡的同时合理地整合其他功能,形成一套可以满足实际需求的配置方案。
下面的有一些基础示例片段,当然不可能将所有的配置情况包括在内,希望能够起到抛砖引玉的效果,同时也需要大家在实际应用过程中多总结多积累。在配置中需要注意的地方将以注释的形式添加。
配置实例一:对所有请求实现一般轮询规则的负载均衡
在以下实例片段中,backend服务器组中所有服务器的优先级全部配置为默认的weight=1,这样它们会按照一般轮询策略依次接收请求任务。该配置是一个最简单的实现Nginx服务器负载均衡的配置。所有访问www.myweb.name 的请求都会在backend服务器组中实现负载均衡。实例代码如下:
... upstream backend #配置后端服务器组 { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; #默认weight=1 } server { listen 80; server_name www.myweb.name; index index.html index.htm; location / { proxy_pass http://backend; prox_set_header Host $host; } ... }
配置实例二:对所有请求实现加权轮询规则的负载均衡
与“配置实例一”相比,在该实例片段中,backend服务器组中的服务器被赋予了不同的优先级别,weight变量的值就是轮询策略中的“权值”。其中,192.168.1.2:80的级别最高,优先接收和处理客户端请求;192.168.1.4:80的级别最低,是接收和处理客户端请求最少的服务器,192.168.1.3:80将介于以上两者之间。所有访问www.myweb.name的请求都会在backend服务器组中实现加权负载均衡。实例代码如下:
... upstream backend #配置后端服务器组 { server 192.168.1.2:80 weight=5; server 192.168.1.3:80 weight=2; server 192.168.1.4:80; #默认weight=1 } server { listen 80; server_name www.myweb.name; index index.html index.htm; location / { proxy_pass http://backend; prox_set_header Host $host; } ... }
配置实例三:对特定资源实现负载均衡
在该实例片段中,我们设置了两组被代理的服务器组,名为“videobackend”的一组用于对请求video资源的客户端请求进行负载均衡,另一组用于对请求filed资源的客户端请求进行负载均衡。所有对“http://www.mywebname/video/* ”的请求都会在videobackend服务器组中获得均衡效果,所有对“http://www.mywebname/file/* ”的请求都会在filebackend服务器组中获得均衡效果。该实例中展示的是实现一般负载均衡的配置,对于加权负载均衡的配置可以参考“配置实例二”。
在location /file/ {......}块中,我们将客户端的真实信息分别填充到了请求头中的“Host”、“X-Real-IP”和“X-Forwareded-For”头域,这样后端服务器组收到的请求中就保留了客户端的真实信息,而不是Nginx服务器的信息。实例代码如下:
... upstream videobackend #配置后端服务器组1 { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; } upstream filebackend #配置后端服务器组2 { server 192.168.1.5:80; server 192.168.1.6:80; server 192.168.1.7:80; } server { listen 80; server_name www.myweb.name; index index.html index.htm; location /video/ { proxy_pass http://videobackend; #使用后端服务器组1 prox_set_header Host $host; ... } location /file/ { proxy_pass http://filebackend; #使用后端服务器组2 #保留客户端的真实信息 prox_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... } }
配置实例四:对不同域名实现负载均衡
在该实例片段中,我们设置了两个虚拟服务器和两组后端代理的服务器组,分别用来接收不同的域名请求和对这些请求进行负载均衡处理。如果客户端请求域名为“home.myweb.name”,则服务器server1接收并转向homebackend服务器组进行负载均衡处理;如果客户端请求域名为“bbs.myweb.name”,则由服务器server2接收bbsbackend服务器级进行负载均衡处理。这样就实现了对不同域名的负载均衡。
需要注意两组后端服务器组中有一台服务器server 192.168.1.4:80是公用的。在该服务器上需要部署两个域名下的所有资源才能保证客户端请求不会出现问题。实例代码如下:
... upstream bbsbackend #配置后端服务器组1 { server 192.168.1.2:80 weight=2; server 192.168.1.3:80 weight=2; server 192.168.1.4:80; } upstream homebackend #配置后端服务器组2 { server 192.168.1.4:80; server 192.168.1.5:80; server 192.168.1.6:80; } #开始配置server 1 server { listen 80; server_name home.myweb.name; index index.html index.htm; location / { proxy_pass http://homebackend; prox_set_header Host $host; ... } ... } #开始配置server 2 server { listen 80; server_name bbs.myweb.name; index index.html index.htm; location / { proxy_pass http://bbsbackend; prox_set_header Host $host; ... } ... }
配置实例五:实现带有URL重写的负载均衡
首先,我们来看具体的源码,这是在实例一的基础上做的修改:
... upstream backend #配置后端服务器组 { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; #默认weight=1 } server { listen 80; server_name www.myweb.name; index index.html index.htm; location /file/ { rewrite ^(/file/.*)/media/(.*)\.*$) $1/mp3/$2.mp3 last; } location / { proxy_pass http://backend; prox_set_header Host $host; } ... }
该实例片段与“配置一”相比,增加了对URI包含“/file/”的URL重写功能。例如客户端请求的URL为“http://www.myweb.name/file/downlaod/media/1.mp3 ”时,该虚拟服务器首先使用location file/ {......}块转发到后端的backend服务器组中实现负载均衡。这样,就车轻而易举地实现了带有URL重写功能的负载均衡。在该配置方案中,一定要掌握清楚rewrite指令中last标记和break标记的区别,才能达到预计的效果。
以上5个配置实例展示了Nginx服务器实现不同情况下负载均衡配置的基本方法。由于Nginx服务器的功能在结构上是增量式的,因此 ,我们可以在这些配置的基础上继续添加更多功能,比如Web缓存等功能,以及Gzip压缩技术、身份认证、权限管理等。同时在使用upstream指令配置服务器组时,可以充分发挥各个指令的功能,配置出满足需求、高效稳定、功能丰富的Nginx服务器。
以上就是Nginx 负载均衡是什么以及该如何配置的详细内容,更多关于Nginx 负载均衡的资料请关注开心学习网其它相关文章!
- nginxrewrite有什么功能(Nginx Rewrite使用场景及代码案例详解)
- nginx部署配置详解(Nginx服务器基本的模块配置和使用全攻略)
- nginx代理转发域名(Nginx域名转发使用场景代码实例)
- nginx安全配置提示(wdcp Linux面板nginx启用gzip后js未压缩解决方案)
- nginx https 域名配置(阿里云Nginx配置https实现域名访问项目图文教程)
- dockernginx怎么设置容器(docker nginx + https 子域名配置详细教程)
- nginx反向代理通俗讲解(nginx 反向代理之 proxy_pass的实现)
- 实战部署nginxdocker(基于Docker、Nginx和Jenkins实现前端自动化部署)
- 宝塔nginx配置修改(宝塔面板安装Tengine报错:nginx: [emerg] invalid IPv6 address in resolver)
- nginx结构图解(详解Nginx 工作原理)
- nginx如何配置多个域名访问(Nginx同一个域名配置多个项目的实现方法)
- nginx的请求处理(nginx处理http请求实现过程解析)
- nginx日志配置详细教程(Nginx访问日志及错误日志参数说明)
- nginx配置文件的几大模块(nginx简单配置多个server的方法)
- nginxdocker界面(Docker部署nginx实现过程图文详解)
- nginx启动报错连接失败(宝塔面板Nginx环境中出现404 Not Found的解决方法)
- 如何看待美国数十万加仑牛奶倒下水道 历史又重演了(如何看待美国数十万加仑牛奶倒下水道)
- 历史惊人的相似,美国80万加仑牛奶倒入下水道,意味着什么(历史惊人的相似)
- 美国数十万加仑牛奶倒进下水道,世界会重演1929年的大萧条吗(美国数十万加仑牛奶倒进下水道)
- 美国数十万加仑牛奶倒入下水道,贫民区食不果腹,历史再次重演(美国数十万加仑牛奶倒入下水道)
- 美国倒掉数十万加仑牛奶 上热搜第一,这一幕似曾相识(美国倒掉数十万加仑牛奶)
- 深度 倒牛奶 这一幕为何又在美国上演(深度倒牛奶)
热门推荐
- django 如何实现高并发(Django如何防止定时任务并发浅析)
- mysql的uuid说明(MySQL GTID全面总结)
- 网站自动备份工作简报(网站数据自动备份方法)
- nginxssl证书怎么设置(nginx结合openssl实现https的方法)
- nginx-rtmp-module 配置(Nginx搭建rtmp直播服务器实现代码)
- amazeui怎么设置侧边栏(AmazeUI 等分网格的实现示例)
- ASP.NET写文件的方法
- nginx怎么配置静态文件(Nginx 过滤静态资源文件的访问日志的实现)
- python列表的循环遍历使用教程(Python中使用遍历在列表中添加字典遇到的坑)
- h5支付接口第四方支付(h5移动端调用支付宝、微信支付的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9