配置nginx负载均衡


Posted in Servers onMay 06, 2022

前言

nginx作为一款企业级的代理服务器,不管是大中小各类生产项目中,均有广泛的使用,尤其是在前后端分离的项目中,nginx作为路由转发的功能是非常常用的;

在一些流量比较大的项目中,为了应对高并发的场景,后端服务往往采用集群部署,这时候,就需要使用到nginx的负载均衡功能;

实验准备

  • nginx服务器;
  • 两个后端服务;

实验步骤

1、启动两个后端服务

这里准备了两个springboot工程,编写了2个测试使用的接口,以端口号区分

@RestController
@RequestMapping("/api")
public class NginxController1 {
    @GetMapping
    public String test1(){
        return "success test1 8082";
    }
}
@RestController
@RequestMapping("/api")
public class NginxController1 {
    @GetMapping
    public String test1(){
        return "success test1 8081";
    }
}

启动之后,浏览器分别访问一下,确保服务是正常的

配置nginx负载均衡

配置nginx负载均衡

2、nginx.conf进行配置

1)在server中添加一个location,并且配置 proxy_pass

location / {
             #转发到负载服务上
            proxy_pass http://webservers/api/;
 }

2)配置upstream,指向后端服务

upstream webservers{
      server  192.168.9.134:8081;
      server  192.168.9.134:8082;
}

完整的配置参考如下:

#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
   upstream webservers{
      server  192.168.9.134:8081 weight=8;
      server  192.168.9.134:8082 weight=2;
   }
 
    server {
        listen       80;
        server_name  localhost;
        #location / {
         #   root   html;
          #  index  index.html index.htm;
        #}

        location / {
             #转发到负载服务上
            proxy_pass http://webservers/api/;
         }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

修改完毕后,启动nginx,或者重新加载配置

nginx.exe -s reload

浏览器访问:localhost:80,多刷几次,下面两个展示的界面轮询的出现

配置nginx负载均衡

配置nginx负载均衡

3、负载均衡配置说明

默认情况下,直接按照上面的配置后,如果后端有多个服务,采用的是轮询策略;

常用的可选配置包括:

weight 多台机器,可以配置权重值,权重高的服务将会优先被访问
down 某个服务配置down之后,这台服务将不会被访问
backup 配置了这个参数后,除非其他的服务都挂掉了,否则这台服务将不会被访问到

以weight 为例做简单的说明,在上面的配置中,补充weight参数

upstream webservers{
      server  192.168.9.134:8081 weight=8;
      server  192.168.9.134:8082 weight=2;
   }

重新加载配置,按照上面的测试步骤再次刷新页面,这时候可以发现,8081对于的这个服务将会被更多的访问到;

其他负载均衡配置策略

默认情况下,nginx采用的是轮询策略,nginx还提供了其他几种常用的负载均衡配置

1、ip_hash

每个请求按访问IP的hash结果进行分配,这样每个访客就可以固定访问一个后端服务,一定程度上可以解决session问题;

upstream webservers {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> ip_hash; server 192.168.9.134:8081; server 192.168.9.134:8082;}

2、weight

weight代表权重,默认为1,权重越高,被分配的客户端请求就会越多

upstream webservers{
      server  192.168.9.134:8081 weight=8;
      server  192.168.9.134:8082 weight=2;
   }

3、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的将会被优先分配

upstream webservers{
    	server 192.168.9.134:8081;
        server 192.168.9.134:8082;
        fair;
}

4、url_hash

按访问URL的hash结果分配。这样相同的url会被分配到同一个节点,主要为了提高缓存命中率。比如,为了提高访问性能,服务端有大量数据或者资源文件需要被缓存。使用这种策略,可以节省缓存空间,提高缓存命中率

upstream webservers{
	hash &request_uri;
	server 192.168.9.134:8081;
	server 192.168.9.134:8082;
}

5、least_conn

按节点连接数分配,把请求优先分配给连接数少的节点。该策略主要为了解决,各个节点请求处理时间长短不一造成某些节点超负荷的情况。

upstream webservers{
    least_conn;
    server 192.168.9.134:8081;
    server 192.168.9.134:8082;
}

以上不同的负载均衡策略均有各自不同的使用场景,请结合自身的实际情况进行合理的选择,同时,各自配置策略在实际使用的时候也不是孤立的,比如最小连接数可以搭配权重数一起使用

总结

到此这篇关于nginx负载均衡配置的文章就介绍到这了,更多相关nginx负载均衡配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Servers 相关文章推荐
Nginx配置并兼容HTTP实现代码解析
Mar 31 Servers
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
Nginx内网单机反向代理的实现
Nov 07 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
Nginx虚拟主机的配置步骤过程全解
Mar 31 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
nginx搭建NFS网络文件系统
Apr 14 Servers
Windows和Linux上部署Golang并运行程序
Apr 22 Servers
详解ZABBIX监控ESXI主机的问题
Jun 21 Servers
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
Jun 25 Servers
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
Aug 14 Servers
tomcat下部署jenkins的方法
排查Tomcat进程假死的问题
May 06 #Servers
使用Nginx的访问日志统计PV与UV
Tomcat配置访问日志和线程数
May 06 #Servers
tomcat正常启动但网页却无法访问的几种解决方法
May 06 #Servers
tomcat默认最大连接数及相关调整方法
May 06 #Servers
如何Tomcat中使用ipv6地址
May 06 #Servers
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php算法实例分享
2015/07/14 PHP
javascript 自定义事件初探
2009/08/21 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
javascript表单正则应用
2017/02/04 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
python实现简单购物商城
2016/05/21 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python 表格打印代码实例解析
2019/10/12 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
职高毕业生自我鉴定
2013/10/21 职场文书
学习标兵获奖感言
2014/02/20 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
校运会口号
2014/06/18 职场文书
邓小平理论心得体会
2014/09/09 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
门球健将观后感
2015/06/16 职场文书