nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。

环境介绍

配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docker,具体docker的使用请移步docker实战

  • 系统环境:

     root@ubuntu:~# lsb_release  -a			#查看系统版本
     No LSB modules are available.
     Distributor ID:	Ubuntu
     Description:	Ubuntu 19.10
     Release:	19.10
     Codename:	eoan
     root@ubuntu:~# uname -a			#查看系统是多少位
     Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
    
  • docker版本和相关操作系统版本

     docker版本:
     root@ubuntu:~# docker --version			#查看docker版本
     Docker version 19.03.3, build a872fc2f86
    
     操作系统版本:
     [root@57b669db1de1 /]# cat /etc/redhat-release 		#查看系统版本
     CentOS Linux release 8.0.1905 (Core)
     [root@57b669db1de1 /]# uname -a
     Linux 57b669db1de1 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
    
  • 软件版本:

     nginx版本:
     root@ubuntu:~# nginx  -v		查看nginx版本
     nginx version: nginx/1.16.1 (Ubuntu)
    
     docker中nginx版本:
     [root@57b669db1de1 /]# nginx -v		#查看nginx版本
     nginx version: nginx/1.14.1
    

安装nginx

具体nginx的安装请参考nginx安装部署

  • 安装依赖软件

     更新软件包:
     root@ubuntu:~# apt-get update
    
     安装依赖软件:
     root@ubuntu:~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc
    
  • 编译安装nginx

     下载nginx:
     root@ubuntu:~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz
    
     解压:
     root@ubuntu:/opt# tar zxf nginx-1.17.6.tar.gz
     root@ubuntu:/opt# cd nginx-1.17.6/
     root@ubuntu:/opt/nginx-1.17.6# ls		#列出目录
     auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
     root@ubuntu:/opt/nginx-1.17.6# 
    
     配置:
     root@ubuntu:/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx
     编译以及部署:
     root@ubuntu:/opt/nginx-1.17.6# make && make install
     root@ubuntu:/opt/nginx-1.17.6# cd /usr/local/nginx/
     root@ubuntu:/usr/local/nginx# ls
     conf  html  logs  sbin
    
     启动:
     root@ubuntu:/usr/local/nginx# ln sbin/nginx /usr/local/sbin/		#创建nginx软连接,设置为命令
     root@ubuntu:/usr/local/nginx# nginx		#启动nginx
     root@ubuntu:/usr/local/nginx# netstat -anpl | grep nginx		#查看nginx端口是否开启
     root@ubuntu:/usr/local/nginx# lsof -i:80			#查看80端口是否开启
    

docker安装nginx

  • 创建容器

     下载镜像:
     root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos
    
     创建容器并启动:
     root@ubuntu:~#
     root@ubuntu:~# docker run -itd --name nginx1 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
     root@ubuntu:~# docker ps -a		#查看容器是否创建并启动
     CONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS              			PORTS               NAME
     6801d55682a3        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        5 minutes ago       Up 5 	minutes                            nginx1
    
     相同方法创建第二个容器:
     root@ubuntu:~# docker run -itd --name nginx2 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
     root@ubuntu:~# docker ps -a
     root@ubuntu:~#
     root@ubuntu:~# docker ps -a
     CONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS              			PORTS               NAMES
     1d31d3fc0ec1        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        4 minutes ago       Up 4 	minutes                            nginx2
     6801d55682a3        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        5 minutes ago       Up 5 	minutes                            nginx1
    
     连接到容器:
     root@ubuntu:~# docker exec -it nginx1 /bin/bash
     root@ubuntu:~# docker exec -it nginx2 /bin/bash
     [root@6801d55682a3 /]# hostname nginx1			#更改主机名称
     [root@6801d55682a3 /]# bash			#使更改的名称生效
     [root@1d31d3fc0ec1 /]# hostname nginx2
     [root@1d31d3fc0ec1 /]# bash
    
  • 安装nginx

     更新软件包:
     [root@nginx1 /]# yum clean all		#清空缓存
     [root@nginx1 /]# yum makecache		#更新软件包
    
     安装nginx:
     [root@nginx1 /]# yum -y install nginx
     [root@nginx1 /]# rpm -qa | grep nginx		#查看是否已经安装
    
     启动nginx:
     [root@nginx1 /]# systemctl start nginx
     [root@nginx1 /]# netstat -anpl | grep nginx		#查看nginxnn端口是否开启
     [root@nginx1 /]# lsof -i:80		#查看80端口是否开启
     安装第二个nginx使用相同方法即可!此处省略!!!
    
     访问nginx:
     [root@nginx1 /]# curl 127.0.0.1
    
  • 修改网页内容

     查看网页存在目录:
     [root@nginx1 nginx]# more nginx.conf		#查看配置文件
     在配置文件中找到下面root行,后面目录即网页文件存放目录
     root         /usr/share/nginx/html;
     [root@nginx1 html]# cd /usr/share/nginx/html/
     [root@nginx1 html]# ls		#列出目录内容
     404.html  50x.html  index.html	nginx-logo.png	poweredby.png
     [root@nginx1 html]# echo nginx1 > index.html		#清空nginx主页文件内容,并重新写入内容为nginx1
     nginx2如同,注意不要设置一样的主页内容
    
     访问nginx:
     [root@nginx1 html]# curl  127.0.0.1
     nginx1
     [root@nginx2 ~]# curl 127.0.0.1
     nginx2
    
  • 修改配置文件

     nginx1修改内容如下:
      server {
     listen       80;
     server_name  www.nginx1.com;			//设置域名
    
     #charset koi8-r;
    
     #access_log  logs/host.access.log  main;
    
     location / {
         root   html;
         index  index.html index.htm;
     	}
     }
    
     nginx2修改内容如下:
      server {
     listen       80;
     server_name  www.nginx2.com;			//设置域名
    
     #charset koi8-r;
    
     #access_log  logs/host.access.log  main;
    
     location / {
         root   html;
         index  index.html index.htm;
     	}
     }
    

配置http负载均衡器

要开始使用NGINX Plus或NGINX开源对一组服务器的HTTP流量进行负载均衡,使用upstream指令定义该组,该指令放置在http上下文中,proxy_pass指令用来转发请求到后端一般指定在loction上下文中
基本配置方法:

http {
    upstream nginx {			#test为组名
        server www.nginx1.com ;		#server用来指定后端服务器的访问地址,一般指定域名、ip、端口,域名和ip二选一,端口可忽略
        server www.nginx2.com weight=5;		#weight指定权重值
        server www.nginx3.com down;			#down用来停止对此服务器的转发
        ......省略其他配置
    }
    server{
		location / {
			proxy_pass http://nginx;		#http://nginx为转发那个组的后端服务器
			......省略其他配置
		}
		......省略其他配置
	}
}

nginx做负载均衡官方提供了4种方法,下面逐一介绍这四种方法:

  • Round Robin

请求在服务器之间平均分配,同时考虑了服务器权重。默认情况下使用此方法(没有启用它的指令)
默认配置就是Round Robin,配置方法:

http {
   upstream nginx {			#test为组名
       server www.nginx1.com ;		#server用来指定后端服务器的访问地址
       server www.nginx2.com ;		#weight指定权重值
       ......省略其他配置
   }
   server{
   	location / {
   		proxy_pass http://nginx;		#http://nginx为转发那个组的后端服务器
   		......省略其他配置
   	}
   	......省略其他配置
   }
}
  • 最少连接

将活动连接最少的请求发送到服务器,也是在考虑到服务器的权重问题才设置的这种方法
配置方法:

http {
   upstream nginx {			#test为组名
   	   less_conn ;
       server www.nginx1.com ;		#server用来指定后端服务器的访问地址
       server www.nginx2.com ;		#weight指定权重值
       ......省略其他配置
   }
   server{
   	location / {
   		proxy_pass http://nginx;		#http:#nginx为转发那个组的后端服务器
   		......省略其他配置
   	}
   	......省略其他配置
   }
}
  • ip_hash

从客户端IP地址确定向其发送请求的服务器。在这种情况下,可以使用IPv4地址的前三个八位位组或整个IPv6地址来计算哈希值。该方法保证了来自同一地址的请求将到达同一服务器,除非它不可用。
配置方法:

http {
   upstream nginx {			#test为组名
   	   ip_hash ;
       server www.nginx1.com ;		#server用来指定后端服务器的访问地址
       server www.nginx2.com ;		#weight指定权重值
       ......省略其他配置
   }
   server{
   	location / {
   		proxy_pass http://nginx;		#http:#nginx为转发那个组的后端服务器
   		......省略其他配置
   	}
   	......省略其他配置
   }
}
  • hash

向其发送请求的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。
配置方法:

http {
  upstream nginx {			#test为组名
  	  hash $request_uri consistent;
      server www.nginx1.com ;		#server用来指定后端服务器的访问地址
      server www.nginx2.com ;		#weight指定权重值
      ......省略其他配置
  }
  server{
  	location / {
  		proxy_pass http://nginx;		#http://nginx为转发那个组的后端服务器
  		......省略其他配置
  	}
  	......省略其他配置
  }
}

nginx部署基于http负载均衡器的更多相关文章

  1. Centos6.5中Nginx部署基于IP的虚拟…

    Centos6.5 中Nginx 部署基于IP 的虚拟主机 王尚2014.11.18 一.介绍虚拟主机 虚拟主机是使用特殊的软硬件技术,把一台真实的物理电脑主机 分割成多个逻辑存储单元,每个单元都没有 ...

  2. 在云主机上基于nginx部署基于Flask的网站服务器 (自己部署 )

    1.申请云主机 a.阿里云 (注意:阿里云的服务器需要手动添加安全规则使能80端口) b.腾讯云 2.把网站服务器程序拷贝到云主机 3.远程登录云主机 4.解压网站服务器程序 yum install ...

  3. 部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用

    前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理.ABP框架的后端是基于.net core5.0 ...

  4. Ubuntu 14.04 上使用 Nginx 部署 Laravel

    本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ...

  5. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  6. linux vue uwsgi nginx 部署路飞学城 安装 vue

    vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...

  7. SpringBoot集成FastDFS+Nginx整合基于Token的防盗链

    为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...

  8. 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡

    一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...

  9. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

随机推荐

  1. pat 1054 The Dominant Color(20 分)

    1054 The Dominant Color(20 分) Behind the scenes in the computer's memory, color is always talked abo ...

  2. nyoj 275-队花的烦恼一 (stack, push, pop)

    275-队花的烦恼一 内存限制:64MB 时间限制:3000ms 特判: No 通过数:11 提交数:14 难度:1 题目描述: ACM队的队花C小+经常抱怨:“C语言中的格式输出中有十六.十.八进制 ...

  3. 用例图浅谈以及OOA再到情景分析的面向对象电梯的设计(慕课东北大学)面向对象设计思维模式

    上班初期还不太适应,平时学习进度也跟不上,节奏慢下来会有时间更新的了. Diagram  这边以学生课程报名系统为例    这就是一种简单的用例图 用例图可以给读者提供的信息非常丰富,但是缺点是都是概 ...

  4. 【algo&ds】8.最小生成树

    1.最小生成树介绍 什么是最小生成树? 最小生成树(Minimum spanning tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图 ...

  5. Win10专业版和企业版的区别

    微软最新的Windows 10版本诸多,包括精简版(S).家庭版(Home).专业版(Pro).企业版(Enterprise),而论功能体验,Win10专业版和企业版无疑是最完善的.那么,Win10专 ...

  6. PostGIS 递归方法

    在Oracle数据库中,有可以实现递归的函数 select * from table_name start with [condition1] connect by [condition2] 最近发现 ...

  7. 使用Publisher2016快速给图片添加水印

    打开Publisher,根据图片大小及形状选择空白页面大小,此处选择纵向: 点击图标选择图片: 点击绘制文本框: 在文本框中编辑水印内容,对文字大小.字体.颜色进行调整,此处将水印颜色调整为灰色,拖动 ...

  8. 封装Ajax和跨域

    目录 引言 封装ajax 案例:使用自封装ajax 案例:动态加载瀑布流 跨域 引言 对于Ajax现在相信大家已经不会陌生了,无论是原生的XMLHttpRequest方式发送还是通过jQuery框架中 ...

  9. Python 中国大学排名定向爬虫

    代码来自于中国大学Mooc北京理工大学Pythont教学团队:https://www.icourse163.org/learn/BIT-1001870001#/learn/content?type=d ...

  10. 程序员的算法课(18)-常用的图算法:广度优先(BFS)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...