手动部署LNMT(Nginx+Tomcat)并实现Nginx反向代理Tomcat
一、什么是Tomcat?
在弄清楚Tomcat之前要先了解什么是J2EE:从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它是 Java 技术不断适应和促进企业级应用过程中的产物。 适用于企业级应用的 J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的 开发、管理和部署。J2EE 是一个标准,而不是一个现成的产品。
而Tomcat就可以算是一个不完整的J2EE,tomcat为众多的java应用程序服务器嵌入自己的产品中构建商业的java应用程序服务器。

二、Tomcat的yum安装
1.安装JDK
Tomcat的运行需要有JDK的支持
2.安装Tomcat
yum install -y java-1.8.-openjdk.x86_64
yum install -y tomcat.noarch tomcat-admin-webapps.noarch tomcat-docs-webapp.noarch tomcat-webapps.noarch tomcat-javadoc.noarch
3.启动Tomcat
yum安装JDK和Tomcat后就能启动了,Tomcat默认监听在8009端口
systemctl start tomcat
三、Tomcat配置文件结构
1、Tomcat各常见配置组件
1.服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。
2.服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情下只为一个service指派一个server。
连接器类组件:
3.连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP、JServ和JK2连接器。
容器类组件:
4.引擎(Engine):引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。
5.主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。
6.上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。
被嵌套类(nested)组件:
这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。
7.阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。
8.日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。
9.领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。
2.配置示例
<Server port="" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="" protocol="HTTP/1.1"
maxThreads="" connectionTimeout=""
redirectPort=""/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
四、环境准备
1.IP规划、系统及软件版本
主机1(Nginx):IP1:192.168.29.109 IP2:10.10.10.128
主机2(Tomcat):10.10.10.130
软件及版本:
Nginx:nginx-1.12.2-2.el7.x86_64
JDK:java-1.8.0-openjdk.x86_64、java-1.8.0-openjdk-devel.x86_64
Tomcat:tomcat-7.0.76-8.el7_5.noarch、tomcat-admin-webapps.noarch、tomcat-docs-webapp.noarch、tomcat-webapps.noarch
ps:tomcat-admin-webapps.noarch为Tomcat服务器管理页面,tomcat-docs-webapp.noarch为Tomcat文档文件,
关闭firewall与selinux。
2.软件安装并测试
1>在主机1上安装Nginx,在主机2上安装JDK、Tomcat
~]# yum install -y Nginx
~]# yum install -y tomcat-7.0.-.el7_5.noarch tomcat-admin-webapps.noarch tomcat-docs-webapp.noarch tomcat-webapps.noarch java-1.8.-openjdk-devel java-1.8.-openjdk
2>配置Nginx
vim /etc/nginx/conf.d/tomcat.conf
server { #增加虚拟主机
listen ; #监听在80端口
server_name www.ready.com; #以主机名方式建立虚拟主机,主机名为www.ready.com
location / { #配置location匹配规则
proxy_pass http://10.10.10.130:8080; #将匹配的location以http协议反代至主机2的8080端口
}
}
3>配置Tomcat
Tomcat的配置文件路径在/etc/tomcat下,Tomcat的配置文件主要有下面几个:
~]# cd /etc/tomcat/
~]# ls
Catalina conf.d logging.properties tomcat-users.xml
catalina.policy context.xml server.xml web.xml
1.tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
2.catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
3.catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
4.logging.properties: Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等;
5.context.xml:所有host的默认配置信息;
在生产环境中,Tomcat一般不会直接被用户访问,通常情况都会与反向代理组合使用,将客户请求由反向代理至Tomcat进行处理,如httpd、Nginx。要注意的是如果使用Nginx只能使用http协议连接,而httpd则可以使用http和AJP两种协议。
4>使用Tomcat默认配置测试Nginx+Tomcat是否连通
在客户主机(192.168.29.1)上修改hosts文件,在最后一行用管理员权限添加内容192.168.29.109 www.ready.com
启动Nginx,Tomcat
~]# systemctl start nginx #主机1上操作
~]# systemctl start tomcat #主机2上操作
5>访问www.ready.com
连接成功如下图显示:

上图就是Tomcat的默认主页。
tomcat-users.xml配置如下
<!-- <role rolename="admin"/> -->
<role rolename="admin-gui"/>
<!-- <role rolename="admin-gui"/> -->
<!-- <role rolename="admin-script"/> -->
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
<!-- <role rolename="manager"/> -->
<!-- <role rolename="manager-gui"/> -->
<!-- <role rolename="manager-script"/> -->
<!-- <role rolename="manager-jmx"/> -->
<!-- <role rolename="manager-status"/> -->
<!-- <user name="admin" password="adminadmin" roles="admin,manager,admin-gui,
admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> -->
</tomcat-users>
3.在Tomcat上部署测试应用
1.部署WEB网页简介
yum安装的Tomcat的默认网页路径有两个:/var/lib/tomcat/webapps和/usr/share/tomcat/webapps,后者是前者的软连接。部署Java时通常有JAR、WAR、EAR三种包
下面部署以WAR包为例部署一个动态网页,WAR包的结构如下:

1、index.jsp[可选]
2、METAINF[MAVEN自动生成目录]
3、WEB-INF[必含]
①classes目录:存放Java类文件
②lib目录:所需要的jar包
③web.xml:war的描述文件
4、subdirectories[可选目录]
存放一些网页和照片,如:html,jsp,js,jpg等等。
2.创建Java网页包
这里以WAR包为例,创建一个动态网页
a.在默认网站根下创建项目目录
mkdir -pv /var/lib/tomcat/webapps/test/{WEB-INF,META-INF,classes,lib}
b.创建主页文件index.jsp(功能为查询session状态)
vim /var/lib/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">Tomcat.ready.com</font></h1>
<table align="centre" border="">
<tr>
<td>Session ID</td>
<% session.setAttribute("ready.com","ready.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
c.访问http://www.ready.com/test/index.jsp

4.Nginx做反向代理负载均衡后端Tomcat
a.在主机3(IP:10.10.10.131)上安装和主机2相同的软件,并将主机2上/var/lib/tomcat/webapps/test/下的文件用 scp 命令发送至主机3上,修改inde.jsp为下:
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="green">Jerrymouse.ready.com</font></h1> #修改标题颜色和内容
<table align="centre" border="">
<tr>
<td>Session ID</td>
<% session.setAttribute("ready.com","ready.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
b.在主机1上配置Nginx,在默认配置中的http模块中插入upstream
vim /etc/nginx/nginx.conf
upstream tcsv {
server 10.10.10.130:;
server 10.10.10.131:;
}
vim /etc/nginx/conf.d/tomcat.conf
server {
listen ;
server_name www.ready.com;
location / {
proxy_pass http://tcsv;
}
}
c.重启Nginx和Tomcat,再次访问www.ready.com

说明反代成功
手动部署LNMT(Nginx+Tomcat)并实现Nginx反向代理Tomcat的更多相关文章
- nginx反向代理tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题
问题说明:测试机上部署了一套业务环境,nginx反向代理tomcat,在访问时长时间处于加载中,十分缓慢! 通过浏览器调试(F12键->Console),发现有错误ERR_CONTENT_LEN ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第九集之安装Tomcat+Nginx反向代理Tomcat集群】
1,安装Tomcat:和在windows下安装是一样的. 安装tomcat:上传后解压: tar -zxvf apache-tomcat-7.0.88.tar.gz -z:代表.gz格式的压缩包,-x ...
- docker,构建nginx反向代理tomcat
Nginx实现负载均衡是通过配置nginx.conf来实现的,nginx.conf的全部内容如下: user nginx; worker_processes 1; error_log /var/log ...
- Nginx反向代理tomcat返回400 bad request
Nginx反向代理tomcat返回400 bad request nginx 版本1.12, tomcat版本 9.06 最近用Nginx做反向代理tomcat,实现前后端分离,nginx 将请求代理 ...
- 使用Nginx对.NetCore站点进行反向代理
前言 之前的博客我已经在Linux上部署好了.NetCore站点且通过Supervisor对站点进行了进程守护,同时也安装好了Nginx.Nginx的用处非常大,还是简单说下,它最大的功能就是方便我们 ...
- nginx配置虚拟主机、反向代理和负载均衡
为了实现这个功能,需要修改nginx的配置文件,将nginx.conf清理一下,使结构更清晰. worker_processes ; events { worker_connections ; } h ...
- Centos 7 上使用nginx为Node.js配置反向代理时错误:(13: Permission denied) while connecting to upstream
错误来源:Centos 7 上使用nginx为Node.js配置反向代理时产生(13: Permission denied) while connecting to upstream的错误 nginx ...
- Docker Compose一键部署Nginx反向代理Tomcat集群
目录结构如下 mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/ ...
- NGINX如何反向代理Tomcat并且实现Session保持
简介 LNMT=Linux+Nginx+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下被 ...
随机推荐
- SpringMVC 学习 十一 springMVC控制器向jsp或者别的控制器传递参数的四种方法
以后的开发,大部分是发送ajax,因此这四种传递参数的方法,并不太常用.作为了解吧 第一种:使用原生 Servlet 在控制器的响应的方法中添加Servlet中的一些作用域:HttpRequestSe ...
- 搭建repo服务器和上传源码
https://blog.csdn.net/qq_28449863/article/details/79992191 https://blog.csdn.net/qq_28449863/article ...
- java时间与js时间
这是一个由java获取的系统时间与js获取的系统时间不一致导致的测试缺陷 定义方式: java Date date = new Date(); js var Date date2 = new Date ...
- Nginx+Tomcat反向代理利用certbot实现https
一.利用Let's Encrypt 免费生成HTTPS证书 1.下载安装certbot(Let's Encrypt ) 2.利用certbot生成证书 3.配置nginx的https证书 安装cerb ...
- 使用gulp+bebal实现前端自动化es6转es5的构建
说明:es6语法已经越来越普及,但是一些低版本的浏览器不支持es6的语法特性,所以我们在开发完前端项目后,往往需要统一把前端es6的代码编译成es5的代码.本文介绍的就是如何手动和自动的把es6转成e ...
- JavaScript获取键盘事件
JavaScript中: onkeydown 事件会在用户按下一个键盘按键时发生. onkeypress 事件会在键盘按键被按下并释放一个键时发生. onkeyup 事件会在键盘按键被松开时发生. 支 ...
- 前端学习之路-CSS介绍,Html介绍,JavaScript介绍
CSS介绍 学前端必备掌握CSS样式,css为层叠样式表,用来定义页面的显示效果,加强用户的体验乐趣,那么如何用css到html中呢? style属性方式 利用标签中的style属性来改变显示样式 & ...
- PHP利用Session实现上传进度
实现文件上传进度条基本是依靠JS插件或HTML5的File API来完成,其实PHP配合ajax也能实现此功能. PHP手册对于session上传进度是这么介绍的: 当 session.upload_ ...
- JavaScript 交换数组元素位置的几种方式
前言 交换数组元素位置是开发项目中经常用到的场景,总结下用过的几种方式. 第三方变量 最基础的方式,创建一个变量作为中转. let temp = array[index1]; array[index1 ...
- 注意:Tomcat Get请求的坑!
Tomcat8.5,当Get请求中包含了未经编码的中文字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了. Tomcat报错: java.lang.IllegalArgumentExce ...