Nginx的核心!!! 负载均衡、反向代理

目录

负载均衡

1.轮询

2.最少连接数

3.IP哈希

4.加权轮询

5.最少时间

6.一致性哈希

反向代理

测试


之前讲过Nginx 的简介和正则表达式,那些都是Nginx较为基础的操作,Nginx 最重要的最核心的功能,当属反向代理和负载均衡了。

负载均衡

负载均衡可能好理解一点,从字面上来看,就是某个服务器不堪重负的时候,将它的请求均衡一下,前提是有多个后端服务器,如果只有一个那自然均衡不了,一般情况下都不会单挂的。

Nginx 提供多种负载均衡模式进行分流,常见的有

1.轮询

轮询就是假设现在有A、B、C 三台服务器,然后客户端发来了12345678910条请求,这些请求会被均匀地分布给三台服务器,1->A,2->B,3->C……以此类推,无论服务器是否负载,响应是快还是慢。

配置:

upstream backend   #这是负载均衡的名字可以自定 {

        server A.example.com;     #这里也可以用服务器的ip地址

        server B.example.com;

        server C.example.com;

}

2.最少连接数

字面意思,还是那三台服务器,然后A 有5个请求,B有3个请求,C有一个请求,那么接下来的两个请求都会被分配到C服务器,简而言之就是现在谁最不忙谁来接待一下。

配置:

upstream backend {

        least_conn;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

3.IP哈希

ip哈希就是通过计算,将客户端的ip地址换算成哈希值,然后将固定的哈希值对应分配给某一台服务器,该客户端的请求只会分配给这台服务器,有助于会话保持

配置:

upstream backend {

        ip_hash;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

4.加权轮询

加权轮询就是为每台服务器设置一个权重,权重大的服务器会被分配更多的请求

配置:

upstream backend {

        server A.example.com weight=3;

        server B.example.com weight=5;

        server C.example.com weight=4;

}

5.最少时间

最少时间也是顾名思义,将请求分配给响应时间最短的服务器,(注意:只有Nginx1.15.3及及以后的版本才可使用)

配置:

upstream backend {

        least_time header;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

6.一致性哈希

一致性哈希可以保证当集群中某台服务器故障时,只有部分请求会重新分配到其他服务器,而不是全部重新分配,在缓存等场景中非常有用。

配置:

upstream backend {

        hash $request_uri consistent;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

上面这些都是常用的负载均衡模式,都是在Nginx 主配置文件下,http{}模块内进行配置

反向代理

要想了解何为反向代理,首先先知道什么是正向代理。上过网的同学肯定知道,我们平时访问一些网站,由于一些原因是无法访问的,此时如果我们非要访问这个网站,那么可以通过向可以访问这个网站的代理服务器发送请求,然后代理服务器去访问这个网站,将网站返回的数据发送给你(客户端),这个过程就是正向代理,代理服务器是帮助客户端的

那么反向代理就是与正向代理相反,代理服务器是帮助服务端的,也就是你要访问的网站,这里的帮助并不是助纣为虐那种帮助,就是帮助处理需求那种帮助。我们访问的大型网站,比如淘宝京东,一般都不可能只有一个服务器,会有多个服务器,此时代理服务器会统一接收服务器返回的请求,返还给客户端,一方面隐藏了服务器信息,而客户端方面只知道自己访问的是淘宝京东,并不会知道是哪一个服务器。

测试

真实环境不方便演示,这里我们用几台虚拟机来模拟真实环境,对负载均衡进行测试

我的四台机器

172.16.233.101~172.16.233.104

101作为nginx 服务器,另外两台作为tomcat服务器

nginx 应该是安装好了的,此处不再教如何安装nginx,我的博客有nginx安装过程

nginx 服务器直接启动nginx 就行了

下面部署2台Tomcat 应用服务器

tomcat 部署需要jdk

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_91

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile

tar zxvf apache-tomcat-8.5.16.tar.gz

mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat

/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh

接下来是动静分离配置

mkdir /usr/local/tomcat/webapps/test

vim /usr/local/tomcat/webapps/test/index.jsp         输入如下代码↓

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

JSP test1 page #指定为 test1 页面

<% out.println("动态页面 1,http://www.test1.com");%>

vim /usr/local/tomcat/conf/server.xml             同样输入如下内容↓

/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh

另两台tomcat 服务器也事完全一样的配置

/usr/local/tomcat/webapps/test/index.jsp  的内容 稍稍修改,分别改为2和3

<% out.println("动态页面 2,NameBright - Domain Expired");%>

<% out.println("动态页面 3,http://www.test3.com");%>

接下来再回到nginx服务器

echo '

这是静态页面

' > /usr/local/nginx/html/index.html

vim /usr/local/nginx/conf/nginx.conf

在http模块下,大概就gzip 后面          配置负载均衡的服务器列表,这里权重我都填1,相当于轮询

upstream tomcat_server {
    server 172.16.233.102:8080 weight=1;
    server 172.16.233.103:8080 weight=1;
    server 172.16.233.104:8080 weight=1;
}

server  模块下添加             #配置Nginx处理动态页面请求

charset utf-8;  

 location ~ .*\.jsp$ {
        proxy_pass http://tomcat_server;

}
    
    location / {
        root html;
        index index.html index.htm;
    }

如果出现乱码得在server 模块下添加

配置完成后我们重新加载nginx服务

访问172.16.233.101/index.jsp(nginx 服务器ip)

多刷新几次,应该是在三个页面之间来回跳

Nginx的核心!!! 负载均衡、反向代理_第1张图片

Nginx的核心!!! 负载均衡、反向代理_第2张图片

Nginx的核心!!! 负载均衡、反向代理_第3张图片

这样的话我们负载均衡就算是做完了

你可能感兴趣的:(nginx,负载均衡)