首页 > 系统相关 >Nginx和Tomcat负载均衡,动静分离

Nginx和Tomcat负载均衡,动静分离

时间:2024-06-30 23:36:04浏览次数:26  
标签:负载 请求 Tomcat 代理 Nginx 反向 usr 服务器

Nginx和Tomcat负载均衡,动静分离

目录

一、反向代理

1、反向代理的概念

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

反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

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

2、反向代理的优势

反向代理的优势:

  • 隐藏真实服务器;
  • 负载均衡便于横向扩充后端动态服务;
  • 动静分离,提升系统健壮性;

3、Nginx四层反向代理和七层反向代理

四层反向代理:是基于IP+PORT(TCP/UDP端口)转发

七层反向代理:基于http,https,mail代理转发

二、Nginx动静分离实现原理

1、动静分离的概念

动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护性。

2、动静分离的原理

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

3、Nginx 静态处理优势

• Nginx处理静态页面的效率远高于Tomcat的处理能力

• 若Tomcat的请求量为1000次,则Nginx的请求量为6000次

• Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M

• Nginx处理静态资源的能力是Tomcat处理的6倍

三、Nginx负载均衡调度算法(6种)

1、轮询(默认)

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

2、加权轮训

weight的值越大分配到的权限概率越高,主要用于后端每台服务器性能不均匀情况,或者仅仅为在主从情况下设置不同的权重值,达到合理利用主机资源

3、least_conn最少连接

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

4、ip_hash

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

补充:session的概念

session共享问题可用后端服务的session共享代替nginx的ip_hash。ip_hash无法作用于四层反向代理,配置需要将其他模式删除例如weight删掉然后直接在加上

注释:

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限中经常用到Session来存储用户状态

session其实分为客户端Session和服务器端Session。

当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。

其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。

Session共享:指在一个浏览器对应多个Web服务时,服务端的Session数据需要共享。例如单点登录、Web服务器集群等场景都需要用到、多子服务。

5、fair(第三方)

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

6、url_hash(第三方)

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

四、Nginx+Tomcat负载均衡、动静分离的操作步骤

1、web1服务器

mkdir /usr/local/tomcat/webapps/Web1Test
vim /usr/local/tomcat/webapps/Web1Test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>this is web1</title>   
</head>
<body>
<% out.println("这是web1");%>
</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/Web1Test" path="" reloadable="true">
    </Context>
</Host>
 
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

2、web2服务器

mkdir /usr/local/tomcat/webapps/Web2Test
vim /usr/local/tomcat/webapps/Web2Test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>this is web2</title>   
</head>
<body>
<% out.println("这是web2");%>
</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/Web2Test" path="" reloadable="true">
    </Context>
</Host>
 
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

3、NginxServer

#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
cd /mnt
放入一个静态图片
 
vim /apps/nginx/conf/nginx.conf#每个人都有不同的位置,因为我是编译安装的
......
http {
......
    #gzip on;
     
    #配置负载均衡的服务器列表
    upstream web {
        server 192.168.116.70:8080 
        server 192.168.116.120:8080 
        server 192.168.116.120:8081 
    }
     
    server {
        listen 80;
     
        charset utf-8;
        #access_log logs/host.access.log main;
         
        #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
        location ~ .*\.jsp$ {
            proxy_pass http://web;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
            proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
            proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
            proxy_set_header X-Forwarded-For 						 	$proxy_add_x_forwarded_for;
        }
         
        #配置Nginx处理静态图片请求
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
            root /mnt;
            expires 10d;
        }
         
        location / {
            root html;
            index index.html index.htm;
        }
......
    }
......
}

五、实际操作

1、Web1

image-20240630212552768

image-20240630212628272

image-20240630213308532

2、web2跟上面一样

3、NginxServer

image-20240630224704758

image-20240630224053809

image-20240630224131668

image-20240630223947121

image-20240630224356280

4、效果展示

image-20240630224505526

image-20240630224524091

image-20240630224601671

image-20240630224620003

标签:负载,请求,Tomcat,代理,Nginx,反向,usr,服务器
From: https://www.cnblogs.com/shijunan2/p/18277148

相关文章

  • Tomcat
    Tomcat一、Tomcat概述1、Tomcat的概念Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用......
  • Nginx的概述和配置
    Nginx的概述和配置目录Nginx的概述和配置一、Nginx概述1、Nginx是什么2、Nginx的特点:3、Nginx和Apache的区别3.1nginx相对于apache的优点∶3.2apache相对于nginx的优点∶4、nginx的两种进程分别有什么作用二、编译安装nginx1、关闭防火墙2、将所需的安装包放到/data下,并解压3、......
  • Tomcat的介绍及使用
    博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • Nginx实现负载均衡的4种常用方式及路径匹配规则
    一、Nginx实现负载均衡的4种常用方式为:轮询模式、IP哈希模式、权重模式、最少连接实现负载均衡需要在http模块中配置使用upstream模块定义后台的webserver的池子,名为proxy-web,在池子中我们可以添加多台后台webserver,其中状态检查、调度算法都是在池子中配置;然后在se......
  • nginx+keepealived 部署高可用
    nginx用docker部署1、安装docker2、拉取nginx镜像:dockerpullnginx3、启动nginx:dockerrun-d-p80:80--namenginxnginx:latest4、新建相关目录和文件夹(用来挂载容器内的文件):·mkdir-p/opt/nginx/{logs,conf,conf.d}·touch/opt/nginx/logs/{access.log,err......
  • Tomcat
    Tomcat安装Tomcat(先下载jdk-8u201-linux-x64.rpm包)[root@GW~]#rpm-ivhjdk-8u201-linux-x64.rpm#安装JDK包警告:jdk-8u201-linux-x64.rpm:头V3RSA/SHA256Signature,密钥IDec551f03:NOKEY准备中...#################################[100%......
  • nginx使用
    Nginx概述Nginx功能介绍静态的web资源服务器html,图片,js,css,txt等静态资源http/https协议的反向代理,7层url结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求tcp/udp协议的请求转发(反向代理)4层基础特性模块化设计,较好的扩展性高可靠性支持热部署:不停......
  • debian11 hexo+nginx 配置https
    环境准备站点服务器:Debian11个人PC:Vscode,nodejs,git,xshell远程工具这里的站点服务器可以是云服务器,也可以实体机子,我这里使用家里的NAS-unraid开了一台Debian11虚拟机,虚拟机用任意linux发行最新版本均可。因为某些原因需要去熟悉Debian,发现在Debian系统上编辑文档......
  • Anolis8.6 hexo+nginx 配置https
    编辑时间2023/03/0123:25环境准备站点服务器:Anolis8.6个人PC:Vscode,nodejs,git,xshell远程工具搭建开始家里除了点情况,电闸跳了,由于没ups,nas直接异常掉电,好在数据校验发现没问题,但是debian那台虚机出毛病了nas上我开了两台虚机,另一台gitlab服务器重启后一点问题......
  • nginx配置负载均衡,nginx负载均衡404错误
    nginx在nginx.conf配置文件中通过upstream模块和server模块的配合使用,就可以实现负载均衡。在http的upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:weight:服务访问的权重,默认是1。down:表示当......