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"%>

<html>

<head>

<title>JSP test1 page</title> #指定为 test1 页面

</head>

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

</body>

</html>

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

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">

</Context>

</Host>

/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 '<html><body><h1>这是静态页面</h1></body></html>' > /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)

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

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

相关推荐
ajsbxi3 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
JustCouvrir21 小时前
macOS|前端工程部署到Nginx服务器
服务器·前端·nginx
AlbertS1 天前
使用 Let’s Encrypt 获取免费SSL证书
nginx·免费·centos7·ssl证书·let’s encrypt
航月1 天前
FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
nginx·docker·mariadb
IT-民工211101 天前
nginx监控指标有哪些
运维·nginx
田猿笔记1 天前
RabbitMQ 实现消息队列负载均衡
分布式·rabbitmq·负载均衡
陌路物是人非1 天前
docker对nginx.conf进行修改后页面无变化或页面报错
nginx·docker
草明2 天前
Nginx 做反向代理,一个服务优先被使用,当无法提供服务时才使用其他的备用服务
运维·nginx·github
吉吉612 天前
Nginx:我自己的网站
运维·nginx
凉忆-2 天前
nginx安装ssl模块教程
运维·nginx·ssl