nginx反向代理负载均衡

文章介绍了Nginx的代理功能,包括正向代理和反向代理的原理和区别,以及反向代理的优势。同时,讨论了动静分离在提升服务访问性和可维护性中的作用,通常使用Nginx处理静态资源。最后,探讨了负载均衡的概念和重要性,以及Nginx如何实现负载均衡的几种策略,并提供了一个简单的Nginx配置和Tomcat服务器集群的部署示例。
摘要由CSDN通过智能技术生成

一、Nginx 代理
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。

不管是正向代理还是反向代理,实现的都是上面的功能。


1、正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

正向代理是为我们服务的,即为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。

正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。

2、反向代理
反向代理*(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。

反向代理的优势:

隐藏真实服务器;
负载均衡便于横向扩充后端动态服务;
动静分离,提升系统健壮性;
nginx支持哪些类型的反向代理?
基于七层的http/https/mail等应用协议的代理
基于四层的ip+tcp/udp端口的代理
二、动静分离
动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护性。

一般来说,都需要将动态资源和静态资源分开,由于 Nginx 的高并发和静态资源缓存等特性,经常将静态资源部署在 Nginx 上。如果请求的是静态资源,直接到静态资源目录获取资源,如果是动态资源的请求,则利用反向代理的原理,把请求转发给对应后台应用去处理,从而实现动静分离。

使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。

三、负载均衡
一般情况下,客户端发送多个请求到服务器,服务器处理请求,其中一部分可能要操作一些资源比如数据库、静态资源等,服务器处理完毕后,再将结果返回给客户端。

这种模式对于早期的系统来说,功能要求不复杂,且并发请求相对较少的情况下还能胜任,成本也低。随着信息数量不断增长,访问量和数据量飞速增长,以及系统业务复杂度持续增加,这种做法已无法满足要求,并发量特别大时,服务器容易崩。

很明显这是由于服务器性能的瓶颈造成的问题,除了堆机器之外,最重要的做法就是负载均衡。

请求爆发式增长的情况下,单个机器性能再强劲也无法满足要求了,这个时候集群的概念产生了,单个服务器解决不了的问题,可以使用多个服务器,然后将请求分发到各个服务器上,将负载分发到不同的服务器,这就是负载均衡,核心是「分摊压力」。 Nginx 实现负载均衡,一般来说指的是将请求转发给服务器集群。

举个具体的例子,晚高峰乘坐地铁的时候,入站口经常会有地铁工作人员大喇叭“请走 B 口, B 口人少车空…”,这个工作人员的作用就是负载均衡。


Nginx 实现负载均衡的策略
轮询策略(rr):默认情况下采用的策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。

最小连接数策略:将请求优先分配给压力较小的服务器,它可以平衡每个队列的长度,并避免向压力大的服务器添加更多的请求。

最快响应时间策略:优先分配给响应时间最短的服务器。

客户端 ip 绑定策略:来自同一个 ip 的请求永远只分配一台服务器,有效解决了动态网页存在的 session 共享问题。

四、Nginx 实战配置
Nginx 服务器:192.168.154.13:80
Tomcat服务器1:192.168.154.12:8080
Tomcat服务器2:192.168.154.10:8080 192.168.154.10:8081

根据之前Tomcat部署及优化章节下的Tomcat多实例部署,已经配置好了两个Tomcat服务器,分别是http://192.168.154.10:8080和 htttp://192.168.154.10:8081,现在我们再开一台IP地址为192.168.154.12的主机部署Tomcat 服务器。

部署Tomcat服务器前要先配置JDK环境变量

1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
setenforce 0
1
2
3
4
5
2、设置JDK环境变量
## 192.168.154.12的主机
cd /opt
tar xf jdk-8u91-linux-x64.tar.gz 
mv jdk1.8.0_91/ /usr/local/
cd /usr/local/
1
2
3
4
5
#进入IP地址为192.168.154.10的主机,将其环境变量jdk.sh复制到192.168.154.12主机下
cd /etc/profile.d/
ls
scp jdk.sh 192.168.154.12:`pwd`
1
2
3
4


##192.168.154.12的主机
cd /etc/profile.d/
ls #可以看到jdk.sh已经复制过来了
vim jdk.sh #修改路径

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:$JRE_HOME/bin:$PATH

source jdk.sh 

java -version
1
2
3
4
5
6
7
8
9
10
11
12
13

3、安装启动Tomcat
#192.168.154.12
cd /opt
tar xf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16 /usr/local/tomcat
cd /usr/local/tomcat/bin/
./startup.sh 
1
2
3
4
5
6

4、安装启动 Nginx 服务器
我们现在再开一台IP为192.168.154.13的主机来部署Nginx服务器

部署 Nginx 服务器做负载均衡

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

mount /dev/cdrom /mnt

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make  #安装依赖包

cd /opt
tar zxvf nginx-1.12.0.tar.gz

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module
make && make install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
systemctl daemon-reload 
systemctl start nginx.service
systemctl enable nginx.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

给每个tomcat服务器添加动态网页

#192.168.154.10 添加第1个动态页面
cd /usr/local/tomcat/webapps/
mkdir test
cd test/
vim 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值