配置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配置proxy_pass中url末尾带/与不带/的区别详解
Mar 31 Servers
如何利用map实现Nginx允许多个域名跨域
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
Nginx 路由转发和反向代理location配置实现
Nov 11 Servers
Nginx虚拟主机的搭建的实现步骤
Jan 18 Servers
Kubernetes中Deployment的升级与回滚
Apr 01 Servers
Nginx速查手册及常见问题
Apr 07 Servers
如何Tomcat中使用ipv6地址
May 06 Servers
netty 实现tomcat的示例代码
Jun 05 Servers
Linux中各个目录的作用与内容
Jun 28 Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 Servers
修改Nginx配置返回指定content-type的方法
Sep 23 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中全局变量global的使用演示代码
2011/05/18 PHP
php学习之流程控制实现代码
2011/06/09 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
初识ThinkPHP控制器
2016/04/07 PHP
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
详解Axios统一错误处理与后置
2018/09/26 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
python抓取百度首页的方法
2015/05/19 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
简单了解python元组tuple相关原理
2019/12/02 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
中专毕业生求职简历的自我评价
2013/10/21 职场文书
工商局个人工作总结
2015/03/03 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
浅谈Redis的几个过期策略
2021/05/27 Redis
全网非常详细的pytest配置文件
2022/07/15 Python