Nginx反向代理与负载均衡

news/2024/7/10 2:45:47 标签: 负载均衡, nginx, 服务器

目录

Nginx反向代理

1、什么是代理

2、实现反向代理实验

①实验拓扑

②实验目的

③实验过程

二、反向代理负载均衡

1、反向代理负载均衡调度算法

①轮询算法

②加权轮询算法

③最小连接数算法

④ip、url  哈希算法

⑤响应时间fair算法

2、实现反向代理负载均衡实验

①实验拓扑

②实验目的

③实验过程


Nginx反向代理

1、什么是代理

代理分为两类,正向代理和反向代理。

正向代理:帮助用户访问服务器,缓存服务器内容。

反向代理:代理服务器处理用户的请求,决定转发请求给谁处理负载均衡的作用。

2、实现反向代理实验

nginx可以代理七层(应用层)和四层(网络层),代理七层代理比四层代理看到的东西多功能强大,可以看到真实数据。

使用模块: proxy_pass   反向代理的服务器地址或域名;

①实验拓扑

②实验目的

由pc2代理服务器,代理服务端pc3处理用户pc1的请求。

③实验过程

①首先准备三台虚拟机且关闭防火墙和selinux,其中pc2和pc3安装nginx。
pc2、pc3执行:
yum  install   epel-release -y 
yum  install   nginx  -y 
#安装nginx
②pc2和pc3上创建子配置文件test.conf
pc2、pc3执行:
cd /etc/nginx/conf.d/
touch test.conf
#进入子配置文件目录创建子配置文件
③服务端pc3子配置文件内容
server {
    root /etc/nginx/html;
#指定虚拟主机根目录
}
④创建服务端pc3虚拟主机的根目录,并写默认内容为this is pc3在index.html中
mkdir  -p /etc/nginx/html;
echo "this is pc3">/etc/nginx/html/index.html
#递归创建文件夹并设置默认主页内容
⑤反向代理服务器pc2的配置文件内容:
server {
    listen 80;
#监听所有80端口
    server_name www.lhj.com;
#创建虚拟主机www.lhj.com
location /{
proxy_pass http://192.168.30.13
#访问反代的虚拟主机www.lhj.com则由192.168.30.13处理请求
}    
}
⑥代理服务和服务端开启nginx服务,并在pc1客户端添加www.lhj.com的对应hosts文件进行测试
pc2、pc3执行:
systemctl start nginx 
pc1执行:
sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts  
#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com内容
curl  www.lhj.com
#访问反向代理服务器
得到内容
this is  pc3

二、反向代理负载均衡

nginx反向代理负载均衡中用的是upstream模块,应用于http模块中,目的为可为所有server模块提供服务,默认算法为轮询。

使用格式:

upstream    name(反代名称){

server   后端服务器地址   [算法]  [其他配置] ;

}

其他配置:①max_conns=数字;设置最大活动连接数,默认为0表示无限制

                  ②max_fails=数字;后端服务器下载条件,对本次调度选择的后端服务器进行连续检查,如果都失败标记不可用,默认1次

                  ③fail_timeout=time;后的服务器上行时间,坏掉后修复需要检查多久才能上线使用,默认检查10s

                  ④backup 设置为备份服务器,所有服务器不可用时使用此服务,注意不能指定自己;

                  ⑤down 指定此服务器down状态,无论本身是什么状态;

1、反向代理负载均衡调度算法

①轮询算法

默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流给。

upstream   lhj{   server         http://192.168.30.11;

                          server        http://192.168.30.12;

}

②加权轮询算法

在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=3另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为3:1。

upstream   lhj{   server         http://192.168.30.11        weight=3;

                          server        http://192.168.30.12;

}

③最小连接数算法

按照nginx反向代理服务器和后端服务器的连接数分配请求,连接越少的分配处理请求优先级越高。例如若最小连接数(least_conn;)是设置是3,后端服务器1有2个请求在处理,而后端服务器2只有一个请求在处理则新请求交给后端服务器2。

upstream   lhj{    least_conn;

                          server         http://192.168.30.11;

                          server        http://192.168.30.12;

}

④ip、url  哈希算法

每个请求按访问ip或者url的hash结果分配,这样每个访客固定访问一个后端服务器,不需要知道是如何计算的,只要了解会固定访问一个后端服务器即可。

⑤响应时间fair算法

需要解读nginx第三方模块ngx_http_upstream_fair_module实现,配置时max_fails=number为后端服务器配置,默认单位为秒,按照响应时间来处理请求,响应时间越短越优先分配

2、实现反向代理负载均衡实验

使用变量:$remote_root

①实验拓扑

②实验目的

用户pc1访问代理服务的www.lhj.com虚拟主机域名时,若由服务端pc3服务器处理则返回this is pc3若由服务端pc4服务器处理则返回this is pc4 用nginx反向代理实现负载均衡

③实验过程

①首先准备四台虚拟机且关闭防火墙和selinux,其中pc2、pc3、pc4安装nginx。
pc2、pc3、pc4执行:
yum  install   epel-release -y 
yum  install   nginx  -y 
#安装nginx
②pc2、pc3、pc4上创建子配置文件test.conf
pc2、pc3、pc4执行:
cd /etc/nginx/conf.d/
touch test.conf
#进入子配置文件目录创建子配置文件
③服务端pc3子配置文件内容
server {
    root /etc/nginx/html;
#指定虚拟主机根目录
}
④创建服务端pc3虚拟主机的根目录,并写默认内容为this is pc3在index.html中
mkdir  -p /etc/nginx/html;
echo "this is pc3">/etc/nginx/html/index.html
#递归创建文件夹并设置默认主页内容
⑤服务端pc4子配置文件内容
server {
    root /etc/nginx/html;
#指定虚拟主机根目录
}
⑥服务端pc4子配置文件内容
server {
    root /etc/nginx/html;
#指定虚拟主机根目录
}
⑦创建服务端pc4虚拟主机的根目录,并写默认内容为this is pc4在index.html中
mkdir  -p /etc/nginx/html;
echo "this is pc4">/etc/nginx/html/index.html
⑧反向代理服务器pc2的主配置文件和子配置文件修改:
主配置文件内容修改:
vim /etc/nginx/nginx.conf
#打开主配置文件,在主配置文件的http模块中添加内容如下:
upstream  lhj {
#创建名字为lhj的方向代理负载均衡
    server 192.168.30.13;
#服务端pc3地址
    server 192.168.30.14;
#服务端pc4地址
}
#子配置文件test.conf内容:
server {
    listen 80;
#监听所有80端口
    server_name www.lhj.com;
#创建虚拟主机www.lhj.com
location /{
proxy_pass http://lhj;
#访问反代的虚拟主机www.lhj.com则由反向代理负载均衡lhj来处理请求
}    
}
⑨代理服务和服务端开启nginx服务,并在pc1客户端添加www.lhj.com的对应hosts文件进行测试
pc2、pc3、pc4执行:
systemctl start nginx 
pc1执行:
sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts  
#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com内容
curl  www.lhj.com
#多次使用访问反向代理服务器
得到内容
this is  pc3
this is  pc4的比例大概为1:1


http://www.niftyadmin.cn/n/177461.html

相关文章

【华为OD机试 2023最新 】 最大利润(C++)

题目描述 商人经营一家店铺,有number种商品, 由于仓库限制每件商品的最大持有数量是item[index] 每种商品的价格是item-price[item_index][day] 通过对商品的买进和卖出获取利润 请给出商人在days天内能获取的最大的利润 注:同一件商品可以反复买进和卖出 输入描述 第一行…

2021 包河区 信息学区赛 小学组

2021 包河区 信息学区赛 小学组T1.攒钱规则(savings) 题目描述 小丽生日的时候,获得一个空空的储钱罐。她想要把自己的零花钱放进去。小丽决定,在第i天的早上,放i元人民币到储钱罐里。也就是说,第1天早上,她放1元到储钱罐里;第2天早上,她再放2元到储钱罐里,以此类推。…

Struts2 Ognl setValue 触发方式

0x00 前言 一直被Ognl卡着,主要描述了Ognl setValue poc触发的原理和方式。 0x01 环境 ognl-2.6.11 1.Demo Map context new HashMap(); Ognl.setValue("(\"java.lang.RuntimegetRuntime().exec(\calc\)\")(a)(b)",context,"")…

进程控制块PCB

为了管理进程,内核必须对每个进程所做的事情进行清楚的描述。内核为每个进程分配一个 PCB(Processing Control Block)进程控制块,维护进程相关的信息,Linux 内核的进程控制块是 task_struct 结构体。 在 /usr/src/linux-headers-xxx/…

题目:1.两数之和

题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺…

离线部署docker

1.2. 安装Docker (1) 上传docker-19.03.5.tar安装包到/app目录下 (2) 解压docker-19.03.5.tar到当前文件夹 tar -zxvf docker-19.03.5.tar (3) 将docker目录下所有文件复制到/usr/bin目录下 cp docker/* /usr/bin/ (4) 配置docker的systemctl指令 将如下内容写入到/etc/s…

langchain 正式学习1

langchain 正式学习1 langchain的pypi: https://pypi.org/project/langchain/ 让New Bing 给我推荐些博客和笔记 好的,我为你找到了一些LangChain的学习笔记,你可以参考以下的链接: LangChain: Introduction and Getting Started…

达梦数据库 linux安装

检查 Linux(Unix)系统信息 如果用户的 DM 软件安装包是经过数字签名的,请按官网进行相关操作。此处忽略。 获取系统位数 getconf LONG_BIT 查询操作系统release信息 lsb_release -a 查询系统信息 cat /etc/issue 查询系统名称 uname -a 之所以要先检查系统信息&…