nginx负载均衡tomcat和配置ssl

时间:2023-03-09 00:49:32
nginx负载均衡tomcat和配置ssl

tomcat

组件功能

engine

负责处理connector接收到的用户请求,将请求交给对应的host处理,engine有一个默认的虚拟主机,所有host都不匹配时,交给默认处理

host

代表虚拟主机,应和域名相匹配的。可以部署一个或多个webapp,每个webapp对应一个context(和context path)

参数解释

host 表示一个虚拟主机

name 指定主机名

appBase 应用程序基本目录,相对于变量CATALINA_HOME而言;也可写绝对路径

unpackWARs 如果为 true,则 tomcat 会自动将 WAR 文件解压,否则不解压,直接从 WAR 文件中运行应用程序

context

定义一个应用程序,是一个最内层的容器类组件(不能再嵌套)。配置该项的主要目的是指定对应的webapp根目录,其还能为 webapp 指定额外的属性

connector

在某个指定端口上侦听用户请求,并交给engine处理,从engine出获得回应并会用户

service

将 connector 关联至 engine,一个service内只能有一个engine,可以有多个connector

server

表示一个运行于jvm中的实例

valve

阀门,拦截请求并在将其转至对应的 webapp 前进行某种处理操作,

可以用于任何容器中,比如记录日志(access log valve)、基于 IP 做访

问控制(remote address filter valve)。

logger

日志记录器,用于记录组件内部的状态信息,可以用于除 context 外

的任何容器中。

realm

可以用于任意容器类的组件中,关联一个用户认证库,实现认证和

授权。可以关联的认证库有两种:UserDatabaseRealm、MemoryRealm

和 JDBCRealm。

UserDatabaseRealm

使用 JNDI 自定义的用户认证库。

工作流程

用户发送请求到 WEB 服务器,该请求会被正在监听的 Connector 连接器接收,并把该请求交给 Service 下的 Engine 来处理,并等待 Engine 处理的结果。Engine 获得请求后会根据请求的主机信息来匹配相应的 Host 主机,Host 主机会根据请求的路径匹配对应的 Context,Context web 应用匹配上之后就构建 request、response 请求对象,调用指定的Servlet 来处理请求。请求处理完成后会将 response 对象返回给 Host 主机,Host 主机将response 对象返回给 Engine 引擎,Engine 再将 response 对象返回给 Connector 链接器,最后 Connector 连接器将 response 返回给浏览器。

nginx负载均衡tomcat

环境

Nginx 服务器 CentOS 7.5 x86_64 192.168.111.3 nginx1.14
Tomcat 服务器 1 CentOS 7.5 x86_64 192.168.111.4 jdk tomcat8
Tomcat 服务器 2 CentOS 7.5 x86_64 192.168.111.5 jdk tomcat8

各软件安装步骤,可以参考笔者其他文章

  • 修改tomcat配置文件

tomcat1

#mkdir /web/webapp -p

[root@localhost conf]# vim /usr/local/tomcat8/conf/server.xml
147 <Host name="192.168.111.4" appBase="/web"
148 unpackWARs="true" autoDeploy="true">
149 <Context docBase="webapp" path="" reloadable="false"></Context>
150 </Host>
#添加如上 [root@localhost conf]# vim /web/webapp/index.jsp
#测试页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test page</title>
</head>
<body>
<%out.println("Welcome to test site,http://www.qiao.com");%>
</body>
</html> [root@localhost conf]# sh /usr/local/tomcat8/bin/startup.sh

tomcat2与1几乎相同

#mkdir /web/webapp -p

[root@localhost conf]# vim /usr/local/tomcat8/conf/server.xml
147 <Host name="192.168.111.5" appBase="/web"
148 unpackWARs="true" autoDeploy="true">
149 <Context docBase="webapp" path="" reloadable="false"></Context>
150 </Host>
#添加如上 [root@localhost conf]# vim /web/webapp/index.jsp
#测试页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test page</title>
</head>
<body>
<%out.println("Welcome to test site,http://www.ying.com");%>
</body>
</html> [root@localhost conf]# sh /usr/local/tomcat8/bin/startup.sh
  • 修改nginx配置文件
http{
...
34 upstream tomcat_server {
#调用upstrem模块,tomcat_server为负载均衡群集的名称
35 server 192.168.111.4:8080 weight=1;
36 server 192.168.111.5:8080 weight=1;
37 } ...
}
server{
...
53 location ~ \.jsp${
55 }
54 proxy_pass http://tomcat_server; ... }

客户端访问192.168.111.3/index.jsp进行验证

nginx负载均衡算法

轮询

根据weight的值分配到后端服务器,若后端服务器死机,自动剔除,weight值越大,给其分配的请求越多

least_conn

最小连接调度(Least-Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况

ip_hash

每个用户按照访问IP的哈希结果分配,使来自同一个 IP 的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的 session 共享问题。

fair

根据访问页面的大小和后端服务器的响应时间判断负载情况,选择负载较轻的机器进行分流,种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此要慎用。编译时需要添加upstrem_fair模块

URL_hash

按访问的 URL 的哈希结果来分配请求,使每个 URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx 本身不支持 url_hash,如果需要这种调度算法,则必须安装 Nginx 的 hash 软件包。

nginx负载均衡调度的状态

http{
...
34 upstream tomcat_server {
35 ...
36 server 192.168.111.5:8080 weight=1 [down;backup;max_fails;fail_timeout];
37 } ...

down:当前机器退出该负载均衡群集

backup:预留的备份机器。当其他所有的非 backup 机器出现故障或者忙的时候,才会请求backup 机器,因此这台机器的访问压力最低。

max_fails:允许最大请求后端服务器失败的次数,默认为1,超过最大次数时,反回返回 proxy_next_upstream模块定义的错误。

fail_timeout:请求失败超时时间,在经历了max_fails 次失败后,暂停服务的时间。max_fails和 fail_timeout 可以一起使用。

配置tomcat的ssl加密

[root@localhost ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat8/keystore
#使用keytool工具生成加密用到的私钥和证书文件
#-genkeypair:生成密钥对;-alias指定要处理条目的别名;-keyalg指定使用的签名算法;-keystore指定密钥库名称 [root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/usr/local/tomcat8/keystore" keystorePass="123456">
</Connector> [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh 客户端浏览器输入“https://192.168.111.4:8443”进行访问