nginx部署基于http负载均衡器
nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。
环境介绍
配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docker,具体docker的使用请移步docker实战
系统环境:
:~# lsb_release -a #查看系统版本 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 19.10 Release: 19.10 Codename: eoan :~# 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版本: :~# docker --version #查看docker版本 Docker version 19.03.3, build a872fc2f86 操作系统版本: [ /]# cat /etc/redhat-release #查看系统版本 CentOS Linux release 8.0.1905 (Core) [ /]# 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版本: :~# nginx -v 查看nginx版本 nginx version: nginx/1.16.1 (Ubuntu) docker中nginx版本: [ /]# nginx -v #查看nginx版本 nginx version: nginx/1.14.1
安装nginx
具体nginx的安装请参考nginx安装部署
安装依赖软件
更新软件包: :~# apt-get update 安装依赖软件: :~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc
编译安装nginx
下载nginx: :~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz 解压: :/opt# tar zxf nginx-1.17.6.tar.gz :/opt# cd nginx-1.17.6/ :/opt/nginx-1.17.6# ls #列出目录 auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src :/opt/nginx-1.17.6# 配置: :/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx 编译以及部署: :/opt/nginx-1.17.6# make && make install :/opt/nginx-1.17.6# cd /usr/local/nginx/ :/usr/local/nginx# ls conf html logs sbin 启动: :/usr/local/nginx# ln sbin/nginx /usr/local/sbin/ #创建nginx软连接,设置为命令 :/usr/local/nginx# nginx #启动nginx :/usr/local/nginx# netstat -anpl | grep nginx #查看nginx端口是否开启 :/usr/local/nginx# lsof -i:80 #查看80端口是否开启
docker安装nginx
创建容器
下载镜像: :~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos 创建容器并启动: :~# :~# docker run -itd --name nginx1 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init :~# 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 相同方法创建第二个容器: :~# docker run -itd --name nginx2 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init :~# docker ps -a :~# :~# 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 连接到容器: :~# docker exec -it nginx1 /bin/bash :~# docker exec -it nginx2 /bin/bash [ /]# hostname nginx1 #更改主机名称 [ /]# bash #使更改的名称生效 [ /]# hostname nginx2 [ /]# bash
安装nginx
更新软件包: [ /]# yum clean all #清空缓存 [ /]# yum makecache #更新软件包 安装nginx: [ /]# yum -y install nginx [ /]# rpm -qa | grep nginx #查看是否已经安装 启动nginx: [ /]# systemctl start nginx [ /]# netstat -anpl | grep nginx #查看nginxnn端口是否开启 [ /]# lsof -i:80 #查看80端口是否开启 安装第二个nginx使用相同方法即可!此处省略!!! 访问nginx: [ /]# curl 127.0.0.1
修改网页内容
查看网页存在目录: [ nginx]# more nginx.conf #查看配置文件 在配置文件中找到下面root行,后面目录即网页文件存放目录 root /usr/share/nginx/html; [ html]# cd /usr/share/nginx/html/ [ html]# ls #列出目录内容 404.html 50x.html index.html nginx-logo.png poweredby.png [ html]# echo nginx1 > index.html #清空nginx主页文件内容,并重新写入内容为nginx1 nginx2如同,注意不要设置一样的主页内容 访问nginx: [ html]# curl 127.0.0.1 nginx1 [ ~]# 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为转发那个组的后端服务器 ......省略其他配置 } ......省略其他配置 } }
相关推荐
nginxs 2020-11-14
时光流水 2020-09-23
王道革 2020-11-25
bwyyziq 2020-11-22
pigsmall 2020-11-19
changecan 2020-11-19
helloWorldAndYou 2020-11-16
红石丶 2020-11-13
WanKaShing 2020-11-12
yangkang 2020-11-12
滴水穿石点石成金 2020-11-12
张荣珍 2020-11-12
wuxunanjing 2020-11-11
魅惑青花瓷 2020-11-11
lihongtai 2020-11-09
yangkang 2020-11-09
worldsnow 2020-11-06
MichaelJScofield 2020-11-06