一、什么是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的更多相关文章

  1. nginx反向代理tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题

    问题说明:测试机上部署了一套业务环境,nginx反向代理tomcat,在访问时长时间处于加载中,十分缓慢! 通过浏览器调试(F12键->Console),发现有错误ERR_CONTENT_LEN ...

  2. 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 ...

  3. docker,构建nginx反向代理tomcat

    Nginx实现负载均衡是通过配置nginx.conf来实现的,nginx.conf的全部内容如下: user nginx; worker_processes 1; error_log /var/log ...

  4. Nginx反向代理tomcat返回400 bad request

    Nginx反向代理tomcat返回400 bad request nginx 版本1.12, tomcat版本 9.06 最近用Nginx做反向代理tomcat,实现前后端分离,nginx 将请求代理 ...

  5. 使用Nginx对.NetCore站点进行反向代理

    前言 之前的博客我已经在Linux上部署好了.NetCore站点且通过Supervisor对站点进行了进程守护,同时也安装好了Nginx.Nginx的用处非常大,还是简单说下,它最大的功能就是方便我们 ...

  6. nginx配置虚拟主机、反向代理和负载均衡

    为了实现这个功能,需要修改nginx的配置文件,将nginx.conf清理一下,使结构更清晰. worker_processes ; events { worker_connections ; } h ...

  7. 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 ...

  8. Docker Compose一键部署Nginx反向代理Tomcat集群

    目录结构如下 mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/ ...

  9. NGINX如何反向代理Tomcat并且实现Session保持

    简介 LNMT=Linux+Nginx+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下被 ...

随机推荐

  1. 词向量之word2vec实践

    首先感谢无私分享的各位大神,文中很多内容多有借鉴之处.本次将自己的实验过程记录,希望能帮助有需要的同学. 一.从下载数据开始 现在的中文语料库不是特别丰富,我在之前的文章中略有整理,有兴趣的可以看看. ...

  2. TensorFlow笔记之常见七个参数

    对TensorFlow深度学习中常见参数的总结分析 神经网络中常见的参数有:初始学习率.学习率衰减率.隐藏层节点数量.迭代轮数.正则化系数.滑动平均衰减率.批训练数量七个参数. 对这七个参数,大部分情 ...

  3. Linux环境下java开发环境搭建一 JDK搭建

    第一步:下载jdk压缩文件 第二步:上传到家目录下的soft目录下,可以采用winscp,此处下载的是.tar.gz文件 第三步:解压压缩文件,并在/usr/local目录下创建一个jdk7的目录,并 ...

  4. Java WEB开发环境搭建以及创建Maven Web项目

    根据此链接博文学习配置: http://www.cnblogs.com/zyw-205520/p/4767633.html 1.JDK的安装 自行百度,(最好是jdk1.7版本的) 测试如下图,即完成 ...

  5. 服务器安装ubuntu 14.04 server,开机启动屏幕不停滚动错误WRITE SAME failed. Manually zeroing

    昨天给服务器上安装了一个Ubuntu-14.04-server系统,安装完成后系统可以正常启动,但屏幕上一直滚动着一个错误,sda1:WRITE SAME failed. Manually zeroi ...

  6. ubuntu无法打开software-center

    ubuntu无法打开software-center BUG: 在ubuntu14.04LTS版本下,点击软件中心图标,过了一会软件未能启动,没有动静.用命令行启动报如下错误: perrin@Littl ...

  7. s5 Docker的持久化存储和数据共享

    数据库容器的数据如何才能不会丢失?Docker的持久化存储技术.Docker的数据共享技术能极大提高开发人员的开发效率,边写代码,边看运行结果. 数据持久化之Data Volume Docker持久化 ...

  8. slecte下拉框的多选操作及获取值的 变化

    对select增加一个 multiple属性,再获取多选的值的时候,对数据进行遍历,如果单纯的获取select的value值,指挥获取一个值, 遍历方法 可以先获取到select的dom元素到,然后对 ...

  9. GitHub--创建新的分支(转)

    如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...

  10. 【原创】【Android】揭秘 ART 细节 ---- Garbage collection

      背景 Dalvik :http://zh.wikipedia.org/wiki/Dalvik%E8%99%9A%E6%8B%9F%E6%9C%BA ART :http://source.andro ...