服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - Nginx负载均衡以及动静分离的原理与配置

Nginx负载均衡以及动静分离的原理与配置

2021-08-16 17:56Jahony Nginx

动静分离和负载均衡都是配置nginx实现对请求进行操作,所以下面这篇文章主要给大家介绍了关于Nginx负载均衡以及动静分离的相关资料,需要的朋友可以参考下

一、nginx实现负载均衡原理

nginx实现负载均衡是通过反向代理实现

Nginx负载均衡以及动静分离的原理与配置

nginx服务器作为前端,tomcat服务器作为后端,web页面请求由nginx服务来进行转发。

但是不是把所有的web请求转发,而是将静态页面请求nginx服务器自己来处理,动态页面请求,转发给后端的tomcat服务器来处理。

tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台tomcat服务器,然后通过nginx配置权重来进行挑选tomcat服务器去进行处理,负载均衡的一种策略

nginx服务器

1、首页使用精准匹配

2、静态页面使用正则匹配自己处理

3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给tomcat服务器

二、nginx动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由 nginx 提供服务,动态资源由 nginx 转发至后端。

Nginx负载均衡以及动静分离的原理与配置

nginx 静态处理优势

  • nginx 处理静态页面的效率远高于 tomcat 的处理能力
  • 若 tomcat 的请求量为1000次,则 nginx 的请求量为6000次
  • tomcat 每秒的吞吐量为0.6m,nginx 的每秒吞吐量为3.6m
  • nginx 处理静态资源的能力是 tomcat 处理的6倍

三、nginx + tomcat 动静分离、负载均衡配置步骤

环境准备:

nginx 服务器:192.168.121.13

tomcat 服务器1:192.168.121.12:8080 192.168.121.12:8081

tomcat 服务器2:192.168.121.10

1、部署 nginx 负载均衡服务器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
首先将 nginx-1.12.0.tar.gz 压缩包上传到 /opt 目录下
 
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
yum install -y pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
 
useradd -m -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -c /opt/
 
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module
 
make && make install
 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
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
execreload=/bin/kill -s hup $mainpid
execstop=/bin/kill -s quit $mainpid
privatetmp=true
[install]
wantedby=multi-user.target
 
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

2、部署两台 tomcat 应用服务器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
所需安装包为:
apache-tomcat-9.0.16.tar.gz 
jdk-8u201-linux-x64.rpm
#scp apache-tomcat-9.0.16.tar.gz root@192.168.121.10:/opt    #将所需的压缩包在tomcat1上传给tomcat2 server,当然我们也可以自己直接将压缩包拉到/opt目录下
 
 
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
 
vim /etc/profile.d/java.sh
export java_home=/usr/java/jdk1.8.0_201-amd64
export classpath=.:$java_home/lib/tools.jar:$java_home/lib/dt.jar
export path=$java_home/bin:$path
 
source /etc/profile.d/java.sh
java -version
 
cd /opt
vim abc.java
public class abc {
  public static void main(string[] args){
    system.out.println("hello world!")
  }
}
 
[root@localhost?opt]#javac abc.java      #用来检测jdk环境是否设置成功
[root@localhost?opt]#java abc
hello world!
 
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
 
##启动tomcat##
/usr/local/tomcat/bin/startup.sh
netstat -natp | grep  8080

Nginx负载均衡以及动静分离的原理与配置

Nginx负载均衡以及动静分离的原理与配置
Nginx负载均衡以及动静分离的原理与配置

动静分离配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
(1)tomcat1 server 配置
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
#由于主机名 name 配置都为 localhost,需要删除前面的 host 配置
<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
 
(2)tomcat2 server 配置
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
 
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<html>
<head>
<title>jsp test2 page</title>   #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
 
 
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 host 配置
<host name="localhost" appbase="webapps" unpackwars="true" autodeploy="true" xmlvalidation="false" xmlnamespaceaware="false">
 <context docbase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</host>
 
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
 
 
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<html>
<head>
<title>jsp test3 page</title>   #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>
 
 
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 host 配置
<host name="localhost" appbase="webapps" unpackwars="true" autodeploy="true" xmlvalidation="false" xmlnamespaceaware="false">
 <context docbase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</host>
 
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/

nginx 负载均衡模式

rr 负载均衡模式:

每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。

least_conn 最少连接:

优先将客户端请求调度到当前连接最少的服务器。

ip_hash 负载均衡模式:

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash。

fair(第三方)负载均衡模式:

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash(第三方)负载均衡模式:

和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个url定向到一个同 一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。

总结

到此这篇关于nginx负载均衡以及动静分离的原理与配置的文章就介绍到这了,更多相关nginx负载均衡及动静分离内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_54585768/article/details/117903932

延伸 · 阅读

精彩推荐
  • Nginx通过Nginx规则重写URL去掉index.php不显示index.php

    通过Nginx规则重写URL去掉index.php不显示index.php

    Nginx不仅占用内存少,并发能力强,而且拓展功能丰富,可以通过安装模板来强化功能,也能通过规则优化,优化服务器并发处理能力,是建站的不二之选...

    Genius日记5872020-10-16
  • Nginx如何优化Nginx的处理性能

    如何优化Nginx的处理性能

    Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性,在连接高并发的情况下,Nginx是Apache服务不错的替代品。其特点是占有内存少,...

    Dockone.io5142020-12-11
  • NginxNginx Rewrite使用场景及代码案例详解

    Nginx Rewrite使用场景及代码案例详解

    这篇文章主要介绍了Nginx Rewrite使用场景及代码案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    盗哥泡茶去了11862020-09-27
  • NginxNginx location 和 proxy_pass路径配置问题小结

    Nginx location 和 proxy_pass路径配置问题小结

    本文是基于 location 的匹配末尾是否配置 / 和 proxy_pass 末尾是否配置 / ,进行测试,完全还原了整个测试过程,本文给大家介绍Nginx location 基本配置及相关配...

    自由早晚乱余生18742021-09-24
  • Nginx利用nginx和腾讯云免费证书制作https的方法

    利用nginx和腾讯云免费证书制作https的方法

    这篇文章主要介绍了利用nginx和腾讯云免费证书制作https的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    dalaoyang5992019-12-30
  • NginxNginx动静分离实现案例代码解析

    Nginx动静分离实现案例代码解析

    这篇文章主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    盗哥泡茶去了3382020-09-27
  • Nginxnginx rewrite 伪静态配置参数和使用例子

    nginx rewrite 伪静态配置参数和使用例子

    nginx下伪静态配置参数详细说明,使用nginx的朋友,nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 ...

    服务器之家3102019-10-08
  • Nginxnginx ssl免密码重启教程详解

    nginx ssl免密码重启教程详解

    这篇文章给大家介绍了nginx 如何启动以及nginx ssl 免密码重启 的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧 ...

    mrr4272019-11-19