文档章节

使用Nginx实现多个tomcat的负载运行及Session共享的教程

CapJes
 CapJes
发布于 2016/05/25 15:17
字数 1312
阅读 800
收藏 38

一.Nginx实现多Tomat负载配置

1.下载Nginx,修改Nginx的配置文件nginx.conf

(1)   配置nginx的upstream

upstream tomcats {  
        #weigth参数表示权值,权值越高被分配到的几率越大  
        server 127.0.0.1:8080 weight=5;  
        server 127.0.0.1:8081 weight=1;  
    }  

(2) 配置nginx的80端口映射

 server {  
            listen       80;  
            server_name  tomcats;     
  
            location / {  
                    proxy_connect_timeout   3;  
                    proxy_send_timeout      30;  
                    proxy_read_timeout      30;  
                    proxy_pass http://tomcats;  
            }  
              
   } 

2.下载tomcat安装包,分别部署的结构截图:

(1)    修改tomcat 的相关8080端口配置/conf/server.xml

(2) 修改Tomcat 8081端口修改方法同上的配置文件

3.修改/webapps/ROOT/index.jsp的文件下的内容,作标识。

(1) 8080端口的tomcat的index.jsp

(2) 8081端口的tomcat的index.jsp

 

4.测试配置效果

(1) 启动Nginx

(2)启动tomcat8080,启动tomcat8081

(3)运行效果截图:

8080的权重比较大,所以默认是tomcat8080

(4)关闭Tomat8080,再次刷新上面的localhost页面,运行效果图为:

(5) 怎么样,运行效果不错吧。嘿嘿...........

======================================== 华丽丽的分割线 =================================================

另外,但是如果Nginx负载2个tomcat以上,那么在发布工程的时候,岂不是要重复多次地拷贝war工程包部署到webapps目录下,最后在重复的启动t多个omcat,那么我们怎么解决一次部署就能影响到多个tomcat实例?

后来,在网上搜索了下,可以通过配置修改tomcat 的server.xml的配置文件,将这些个tomcat的webapps目录统一指定到同一个webapps目录下。

 

二. 多个tomcat实例共享同一个webapps目录,达到一次部署到多个tomcat实例的效果

1.修改tomcat 的/conf/server.xml的配置文件

(1)修改tomcat8080的配置文件

<?xml version="1.0" encoding="UTF-8"?>

 --><Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <GlobalNamingResources>

    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>


  <Service name="Catalina">

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
  
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">

    
      <Realm className="org.apache.catalina.realm.LockOutRealm">
     
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
		<!-- 重点关注在这里 appBase 置顶webapps的目录地址 -->
      <Host appBase="D:\APP\Java\SLBTomcats\webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
      </Host>
    </Engine>
  </Service>
</Server>

(2)修改tomcat8081的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8006" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <GlobalNamingResources>

    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8444"/>
    
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444"/>

    <Engine defaultHost="localhost" name="Catalina">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
     
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <!-- 重点关注在这里 appBase 置顶webapps的目录地址 -->
      <Host appBase="D:\APP\Java\SLBTomcats\webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
      </Host>
    </Engine>
  </Service>
</Server>

(3)如果还有很多个,那么重复以上的修改配置文件的方法

 

2.看看测试效果

(1)创建一个测试的Dynamic的web工程,只有一个index.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
	<h1>
		测试结果:<br>
		1.Nginx实现负载多个tomcat.<br>
		2.实现多个tomcat共享同一个webapps目录,实现一次部署运行到多个tomcat实例的效果。
	</h1>
</body>
</html>

(2)将测试工程打包成war包,复制到 这个 D:\APP\Java\SLBTomcats\webapps 目录下。

(3)启动Nginx和两个tomcat,效果图为:

(4) 关闭tomcat8080的tomcat,然后再次刷新上面的页面,同样会出现上面的页面。

(5) 整个配置过程完成

三.利用多Tomcat集群功能,实现简单的Session共享

1.在JavaWeb工程的index.jsp页面中,添加Session获取代码,方便后面测试。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
	<h1>
		测试结果:<br>
		1.Nginx实现负载多个tomcat.<br>
		2.实现多个tomcat共享同一个webapps目录,实现一次部署运行到多个tomcat实例的效果。
	</h1>
	<div>
	  SessionID:<%=session.getId()%>
	  <BR>
	  SessionIP:<%=request.getServerName()%>
	  <BR>
	  SessionPort:<%=request.getServerPort()%>
	</div>
</body>
</html>

2. 修改Tomcat8080 和Tomcat8081两个的server.xml中的配置如下:

<Engine defaultHost="localhost" name="Catalina">
		<!-- 配置简单的Tomcat集群-->	
	  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>  
      <Realm className="org.apache.catalina.realm.LockOutRealm">
     
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <!-- 重点关注在这里 appBase 置顶webapps的目录地址 -->
      <Host appBase="D:\APP\Java\SLBTomcats\webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
      </Host>
    </Engine>

3.在JavaWeb工程的web.xml中修改配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>myProject</display-name>
  <!-- 配置Session复制共享-->
  <distributable/>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

4.重启两个Tomcat

打开两个浏览器测试

通过Nginx访问

================================== 华丽丽的结束分割线=================================

© 著作权归作者所有

CapJes
粉丝 20
博文 11
码字总数 5718
作品 0
成都
程序员
私信 提问
加载中

评论(3)

CapJes
CapJes 博主

引用来自“alan-”的评论

楼上说的对,方便的话还可以用redis进行,多个tomcat session共享
后面抽空补充上。
alan-
alan-
楼上说的对,方便的话还可以用redis进行,多个tomcat session共享
流花飘原
流花飘原
建议把session共享补充上
Nginx在Windows平台的配置

1.1.1 课程目标: 课程目标: 能够使用Nginx搭建Tomcat集群,并完成负载均衡. 1.1.2 Nginx的概述: 什么是Nginx: 为什么使用Nginx: 度娘的解释: 背景: 互联网飞速发展的今天,大用户量高并发已经...

pxk
2017/10/29
49
1
day24_Nginx学习笔记

一、测试 二、代理      反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返...

黑泽明军
2018/06/15
0
0
搭建Nginx + Memcached + Tomcat 集群记录

零:前言 1、单是从软件层面做负载,只能单主nginx服务器,主服务器挂了,系统就挂了 2、实现多台主nginx服务器,可采用DNS负载均衡,即同一个域名绑定多个IP(nginx服务器),按顺序分发 3、...

凡尘里的一根葱
2015/10/22
338
0
Nginx负载均衡多个Tomcat,如何实现Cookie跨大域??

1. 最近使用 memcached-session 方案实现了多个tomcat共享session; 2. 使用Nginx 实现了多个tomcat部署一套系统进行负载均衡; 但是发现一个问题:Tomcat A 部署在 10.0.125.1 下, Tomcat...

山哥
2012/07/19
4.2K
4
session会话-nginx-mysql-tomcat

一、如何保持session会话 目前,为了使web能适应大规模的访问,需要实现应用的集群部署。集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这...

柴鑫旺
2017/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

32位与64位Linux系统下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。 1. 32 位和 64 位C数据类型...

mskk
33分钟前
6
0
Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)

在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide。 针对此需求,整理了三种实现方式,大家按实际情况选择。 当然,我们做项目肯定会用到 UI 框架,常...

张兴华ZHero
40分钟前
7
0
SpringBoot激活profiles你知道几种方式?

多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。 激活Profi...

恒宇少年
41分钟前
8
0
PDF修改文字的方法有哪些?怎么修改PDF文件中的文字

PDF修改文字一直以来都是一个难以解决的问题,很多的办公族在办公的时候会有修改PDF文件中的文字的需要,可是PDF文件一般是不能进行编辑和修改的,难道就没有什么办法解决这个问题了嘛?不要...

趣味办公社
44分钟前
5
0
企业组织中采用服务网格的挑战

作者:Christian Posta 译者:罗广明 原文:https://blog.christianposta.com/challenges-of-adopting-service-mesh-in-enterprise-organizations/ 编者按 本文作者介绍了企业组织采用服务网...

jimmysong
54分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部