使用nginx作为HTTP负载均衡器(翻译文档)
使用nginx作为HTTP负载均衡器简介
跨多个应用程序实例的负载均衡是一种常用的技术,用于优化资源利用、最大化吞吐量、减少延迟和确保容错配置。
我们可以使用nginx作为一个非常高效的HTTP负载均衡器,将流量分配到多个应用服务器上,并通过nginx提高Web应用程序的性能、可伸缩性和可靠性。负载均衡方法
nginx支持以下负载均衡机制(或方法):轮询:对应用服务器的请求以循环方式分发最少连接:下一个请求被分配给活动连接数最少的服务器ip哈希:通过一个哈希函数用于确定下一个请求应该选择哪个服务器(基于客户端的IP地址)。缺省负载均衡配置
nginx最简单的负载平衡配置如下:http{upstreammyapp1{serversrv1。example。com;serversrv2。example。com;serversrv3。example。com;}server{listen80;location{proxypasshttp:myapp1;}}}
在上面的示例中,同一个应用程序有3个实例运行在srv1srv3上。如果没有专门配置负载均衡方式,则默认为轮循方式。所有的请求都被代理到服务器组myapp1,nginx应用HTTP负载均衡来分配请求。
nginx中的反向代理实现包括HTTP、HTTPS、FastCGI、uwsgi、SCGI、Memcached和gRPC的负载均衡。
要为HTTPS而不是HTTP配置负载平衡,只需使用https作为协议。
当为FastCGI、uwsgi、SCGI、Memcached或gRPC设置负载均衡时,分别使用fastcgipass、uwsgipass、scgipass、memcachedpass和grpcpass指令。最小连接负载均衡
另一个负载平衡原则是连接最少的。在某些请求需要较长时间才能完成的情况下,最小连接允许更公平地控制应用程序实例上的负载。
使用最少连接的负载平衡,nginx将尝试不让一个繁忙的应用服务器因过多的请求而超载,而是将新的请求分配到一个不那么繁忙的服务器上。
在服务器组配置中加上leastconn指令时,nginx中的最小连接负载均衡被激活:upstreammyapp1{leastconn;serversrv1。example。com;serversrv2。example。com;serversrv3。example。com;}会话保持
请注意,使用轮循或最少连接的负载平衡,每个后续客户机的请求都可能被分发到不同的服务器。不能保证相同的客户端总是指向相同的服务器。如果需要将客户机绑定到特定的应用服务器换句话说,使客户端会话保持或持久,即始终尝试选择特定的服务器可以使用iphash负载均衡机制。
使用IPhash,客户端的IP地址被用作哈希键,以确定服务器组中应该为客户端的请求选择哪个服务器。此方法可确保来自同一客户机的请求总是被定向到同一服务器,除非该服务器不可用时。
要配置iphash负载均衡,只需将iphash指令添加到服务器组配置中:upstreammyapp1{iphash;serversrv1。example。com;serversrv2。example。com;serversrv3。example。com;}加权负载均衡
也可以通过使用服务器权重来进一步影响nginx的负载均衡算法。
在上面的示例中,没有配置服务器权重,这意味着所有指定的服务器都被视为具有特定负载平衡方法的同等资格。
特别是对于轮询,它还意味着请求在各个服务器上的分布差不多是均等的前提是有足够的请求,并且请求以统一的方式处理并且足够快地完成。
当为服务器指定了权重参数时,权重将作为负载均衡决策的一部分。upstreammyapp1{serversrv1。example。comweight3;serversrv2。example。com;serversrv3。example。com;}
使用此配置,每5个新请求将按如下方式分布到应用程序实例中:3个请求被定向到srv1,一个请求被定向到srv2,另一个请求被定向到srv3。
在nginx的最新版本中,同样可以使用最小连接和ip哈希负载平衡的权重。健康检查
nginx中的反向代理实现包括带内(或被动)服务器健康检查。如果来自特定服务器的响应出现错误,Nginx会将此服务器标记为失败,在一段时间内,将尽量避免为后续的入站请求选择此服务器。
maxfails指令设置在failtimeout期间应该发生的与服务器通信的连续不成功尝试次数。缺省情况下,maxfails设置为1。将其设置为0时,将禁用此服务器的健康检查。failtimeout参数还定义服务器将被标记为失败的时间。在服务器失败后的failtimeout间隔后,Nginx将开始优雅地使用客户端请求探测服务器。如果探测成功,服务器将被标记为活动的服务器。延伸阅读
此外,在nginx中还有更多的指令和参数来控制服务器的负载平衡,例如proxynextupstream、backup、down和keepalive。更多信息请查看我们的参考文档。
最后,应用程序负载平衡,应用程序健康检查,活动监控和服务器组的动态重新配置都可以作为我们付费的NGINXPlus订阅的一部分。
湖南安抚刘龙图挽词二首其一起个诗意的名字宋代汪藻胸次光风霁月明,论文衮衮九河倾。一辞天上金銮直,再见湘南竹马迎。梁相合图烟阁上,郑公忽去雪山轻。眼看过棹呱呱泣,谁谓衡州浪得名。……
送杨佥宪之云南起个诗意的名字明代姚光虞万里看君拥传行,夜郎天外见滇城。百蛮揽辔边尘静,六月飞霜宪府清。骢马声华留建业,碧鸡词赋起昆明。西南到日仍传檄,父老争迎汉长卿。……
花木八咏其六芭蕉雨起个诗意的名字金朝段克己梨园子弟去无踪,门掩蓬莱绣帐空。寂寞绿窗深夜雨,伤心不独有梧桐。花木八咏其六芭蕉雨段克己介绍段克己(1196~125……
皂罗袍其四四时词起个诗意的名字明代呼文如早见雪儿飘粉,见梅儿潇洒,蕊蕊争春。梦儿冻死也离魂,气儿呵杀全无影。门儿重掩,被儿半薰。人儿不见,病儿怎禁?屏儿靠热床儿冷。……
观水北山人新作我行窝起个诗意的名字明代邵宝三里青山接水云,菊花时节每寻君。也知僻地真须假,敢谓虚名可与闻。閒处渔樵如宿约,老来农圃亦徒云。惟应再结吟诗社,共对西神赋夕曛。……
春雪起个诗意的名字元代蓝仁大雪自来南地少,腊前春后苦寒生。江清已压渔舟重,风逆还随柳絮轻。万里山川同一色,谁家烟火起初晴。春风欲解昆崙冻,愿借黄河一洗兵。……
寄题赵明府十松轩二首其二起个诗意的名字明代孙绪南溪深处小山亭,石枕藤床任醉醒。四座烟霞双眼碧,一庭风露十松青。疏帘有月邀清影,惊鹤盘云自远汀。尽日推窗看未厌,杖藜夜夜独来听。……
恻恻吟其四十一起个诗意的名字明代彭日贞琴心永托伴閒居,远别犹勤一纸书。弹指转缘伤浅促,文君无望诔相如。恻恻吟其四十一彭日贞介绍彭日贞(一六二?),字孟阳,……
恻恻吟其六十起个诗意的名字明代彭日贞昔看才艳压仙班,今寄孤坟寂寞山。词客共怜冰玉骨,新诗凭吊满人间。恻恻吟其六十彭日贞介绍彭日贞(一六二?),字孟阳,号……
济宁悼仆十首其五起个诗意的名字明代陈是集笞骂多端了不喧,与萧颖士仆差伦。休言数载携书剑,浃日尽能报主恩。济宁悼仆十首其五陈是集介绍陈是集,字虚斯(一作期),……
弘治三年秋七月喜雨有作其三起个诗意的名字明代庄昶蓑笠焚香祝帝春,任人嘲笑是何民。深山若有为霖者,肯作田头拜雨人。弘治三年秋七月喜雨有作其三庄昶介绍庄昶(1437~14……
卜居五首其二起个诗意的名字明代张家玉萧萧夜雨拂窗蓬,弱草柔条怯晚风。却怪南园数竿竹,亦随风动委池中。卜居五首其二张家玉介绍(16151647)广东东莞人,字元……