主页 > 软件开发  > 

Nginx反向代理与负载均衡


一.Nginx方向代理

1.概述

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

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

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

2.实现反向代理实验

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

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

(1)实验拓扑

(2)实验目的

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

(3)实验过程

①首先准备三台虚拟机且关闭防火墙和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   后端服务器地址   [算法]  [其他配置] ;

}

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

(1)轮询

#默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流给。 upstream lhj{ server http://192.168.227.100; server http://192.168.227.101; }

(2)加权轮询算法

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

(3)最小连接数算法

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

(4)IP、url 哈希算法

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

(5)响应时间fair算法

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

2.反向代理负载均衡实验

1.实验目的

用户pc1访问代理服务的www.6.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 6 { #创建名字为6的方向代理负载均衡 server 192.168.227.102; #服务端pc3地址 server 192.168.227.103; #服务端pc4地址 } #子配置文件test.conf内容: server { listen 80; #监听所有80端口 server_name www.6.com; #创建虚拟主机www.6.com location /{ proxy_pass http://6; #访问反代的虚拟主机www.6.com则由反向代理负载均衡6来处理请求 } } ⑨代理服务和服务端开启nginx服务,并在pc1客户端添加www.6.com的对应hosts文件进行测试 pc2、pc3、pc4执行: systemctl start nginx pc1执行: sed -i '1a\192.168.227.101 www.6.com' /etc/hosts #在/etc/hosts文件的第一行添加192.168.227.101 www.6.com内容 curl www.6.com #多次使用访问反向代理服务器 得到内容 this is pc3 this is pc4的比例大概为1:1

标签:

Nginx反向代理与负载均衡由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Nginx反向代理与负载均衡