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)

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

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

相关推荐
_半夏曲38 分钟前
node.js、nginx、iis、tomcat针对部署方面的简述
nginx·node.js·tomcat
跳跳的向阳花7 小时前
03-03、SpringCloud第三章,负载均衡Ribbon和Feign
spring cloud·ribbon·负载均衡
墨鸦_Cormorant20 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
一只爱撸猫的程序猿20 小时前
一个简单的Linux 服务器性能优化案例
linux·mysql·nginx
DC_BLOG1 天前
Linux-Nginx虚拟主机
linux·运维·nginx
Stara05111 天前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
oushaojun21 天前
ubuntu中使用ffmpeg和nginx推流rtmp视频
nginx·ubuntu·ffmpeg·rtmp
ladymorgana1 天前
【Nginx从入门到精通】05-安装部署-虚拟机不能上网简单排错
网络·nginx·智能路由器
linweidong1 天前
MariaDB面试题及参考答案
linux·运维·数据库·负载均衡·dba·mariadb·后端面试
苹果醋32 天前
Redis | 第3章 对象《Redis设计与实现》
java·运维·spring boot·mysql·nginx