Nginx的反向调度功能

Stella981
• 阅读 582

1.案例实现Nginx反向代理; 2.反向代理的理论知识拓展.

一, 实验Nginx的反向代理功能

 使用Nginx实现Web反向代理功能,实现如下功能:

  • 后端Web服务器两台,可以使用httpd实现
  • Nginx采用轮询的方式调用后端Web服务器
  • 两台Web服务器的权重要求设置为不同的值
  • 最大失败次数为1,失败超时时间为30秒

实验拓扑图:

Nginx的反向调度功能

1. 部署实施后端Web服务器

   后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。

   1.1 部署后端Web1服务器

   web1] # yum -y install httpd

web1]# echo "192.168.2.100" > /var/www/html/index.html

web1]# systemctl restart httpd

web1]# firewall-cmd --set-default-zone=trusted

web1]# setenforce 0

   1.2 部署后端Web2服务器

   web2] # yum -y install httpd

web2]# echo "192.168.2.100" > /var/www/html/index.html

web2]# systemctl restart httpd

web2]# firewall-cmd --set-default-zone=trusted

web2]# setenforce 0

2. 配置Nginx服务器,添加服务器池,实现反向代理功能

proxy]# vim /usr/local/nginx/conf/nginx.conf

...

http{

...

    upstream webserver {         #使用upstream定义后端服务器集群,集群名称可以任意定义,如webserver

server 192.168.2.100:80;      #使用server定义集群中的具体服务器和端口

                                server 192.168.2.200:80;

}

...

server {

                listen        80;

                server_name localhost;

location / {

                                proxy_pass http://webserver;       #通过proxy_pass将用户的请求转发给webserver集群

}

}

proxy]# /usr/local/nginx/sbin/nginx -s reload   //重新加载配置

client]# curl http://192.168.4.5     #多次访问代理服务器测试轮询效果

   ...   //多次访问代理服务器

3. 配置upstream服务器集群池属性

    proxy]# vim /usr/local/nginx/conf/nginx.conf

...

    http {

...

    upstream webserver {

    server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30;

    server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30;

    server 192.168.2.101 down;

}

   #weight设置服务器权重值,默认值为1

   #max_fails设置最大失败次数

   #fail_timeout设置失败超时时间,单位为秒

   #down标记服务器已关机,不参与集群调度

   ...

   server {

               listen        80;

               server_name localhost;

location / {

               proxy_pass http://webserver;      #调用集群

}

}

proxy]# /usr/local/nginx/sbin/nginx -s reload       //重新加载配置

web1]# systemctl stop httpd        //关闭一台后端服务器,如web1

client]# curl http://192.168.4.5     //多次访问代理服务器测试轮询效果

...     //多次访问代理服务器

web1]# systemctl start httpd      //再次启动后端服务器web1的httpd

client]# curl http://192.168.4.5     //多次访问代理服务器测试轮询效果

...   //多次访问代理服务器

4. 配置upstream服务器集群的调度算法

4.1 设置相同客户端访问相同Web服务器

   proxy ]# vim /usr/local/nginx/conf/nginx.conf

...

   http {

...

   upstream webserver {

               ip_hash;        #通过ip_hash设置调度规则为:相同客户端访问相同服务器

               server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;

               server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;

}

...

   server {

   listen        80;

   server_name www.tarena.com;

location / {

                 proxy_pass http://webserver;

}

}

proxy]# /usr/local/nginx/sbin/nginx -s reload   //重新加载配置

client]# curl http://192.168.4.5     #多次访问代理服务器测试轮询效果

...   //多次访问代理服务器

二, Nginx反向代理的知识拓展

     Nginx与Apache一样, 是一款轻量级的web服务器软件,由俄罗斯人研发,它支持数以万计的高并发访问,并且稳定,开源,跨平台.

     是一款高性能的http服务器和反向代理服务器,实现负载均衡是其作为反向代理服务器的重用功能之一.

     例如,国内的jd网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时一个名词应运而生:分布式部署, 也就是通过部署多台服务器来解决访问人数限制的问题;

Nginx的反向调度功能

通过上述图解可知,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时请求的来源明确的,但是请求具体由哪台服务器处理就不明确了,Nginx扮演的就是一个反向代理角色。客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的主要作用:
(1)保证内网的安全.我们通常将反向代理作为公网访问地址,Web服务器位于内网
(2)负载均衡,通过反向代理服务器来优化网站的负载量

负载量:客户端向代理服务器发送的请求数量,而请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。

所以,将代理服务器接收到的请求,按照规则分发的过程,称为负载均衡;常用的调度算法有weight(轮询),ip_hash等.

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

结束.

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Nginx+Keepalived实现站点高可用
公司内部OA系统要做线上高可用,避免单点故障,所以计划使用2台虚拟机通过Keepalived工具来实现nginx的高可用(HighAvaiability),达到一台nginx入口服务器宕机,另一台备机自动接管服务的效果。(nginx做反向代理,实现后端应用服务器的负载均衡)快速搭建请直接跳至第2节。1\.Keepalived介绍
Stella981 Stella981
2年前
Keepalived+Nginx实现高可用和双主节点负载均衡
简介Nginx可以实现高并发反向代理,lvs集群可以实现负载均衡,但是他们都有一个共同的弊端,就是Nginx,lvs架构中Director是单点故障,有没有一个好的方案解决这个问题呢?答案是有。通过Keepalived就可以实现,前端Nginx,lvs中Director服务器的高可用和负载均衡,通过shell命令或者脚本可以实现对服务器状态和服务的监控!
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Nginx Linux详细安装部署教程
转发:https://www.cnblogs.com/taiyonghai/p/6728707.html一、Nginx简介Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Nginx详细安装部署教程
一、Nginx简介Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤二、Nginx安装1、下载Nginx及相关组件Linux系统是Centos6.564位,我直接切换到root用户下安装!(https://im
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这