Tomcat组件:

一、Server组件

如上面示例文件中定义的:

<Server port=”8005” shutdown=”SHUTDOWN”>

这会让Tomcat6启动一个server实例(即一个JVM),它监听在8005端口以接收shutdown命令。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,因此,管理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行。

Server的相关属性:

className: 用于实现此Server容器的完全限定类的名称,默认为org.apache.catalina.core.StandardServer;

port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;

shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;


二、Service组件:

Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器。

如上面示例中的定义:

<Service name=”Catalina”>

这定义了一个名为Catalina的Service,此名字也会在产生相关的日志信息时记录在日志文件当中。

Service相关的属性:

className: 用于实现service的类名,一般都是org.apache.catalina.core.StandardService。

name:此服务的名称,默认为Catalina;


三、连接器组件

1、连接器协议:AJP和HTTP

什么是AJP协议:

AJP(Apache JServ Protocol)协议:

目前正在使用的AJP协议的版本是通过JK和JK2连接器提供支持的AJP13,它基于二进制的格式在Web服务器和Tomcat之间传输数据,而此前的版本AJP10和AJP11则使用文本格式传输数据。

2、连接器类型

1) HTTP连接器

2) SSL连接器

3) AJP 1.3连接器

4) proxy连接器

3.HTTP连接器示例:

<Connector port="8080" protocol="HTTP/1.1"       注:如果不想监听本机的所有地址,需要在此处添加一个address

maxThreads="150" connectionTimeout="20000"

redirectPort="8443"/>

4、连接器常用属性说明

定义连接器时可以配置的属性非常多,但通常定义HTTP连接器时必须定义的属性只有“port”,定义AJP连接器时必须定义的属性只   有"protocol",因为默认的协议为HTTP。以下为常用属性的说明:

1) address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;

2) maxThreads:支持的最大并发连接数,默认为200;

3) port:监听的端口,默认为0;

4) protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;

5) redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;

6) connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;

7) enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;

8) acceptCount:设置等待队列的最大长度;通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;

5、SSL连接器示例:

<Connector port="8443"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS" />


四、Engine组件

1、Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件。如前面示例中定义的:

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

2、常用的属性定义:

defaultHost:Tomcat支持基于FQDN的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;

name:Engine组件的名称,用于日志和错误信息记录时区别不同的引擎;


五、Host组件

位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面示例中的定义:

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

</Host>

常用属性说明:

1) appBase:此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可以使用基于$CATALINA_HOME的相对路径;

2) autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true;

3) unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;

定义虚拟主机的示例:

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

<Host name="localhost" appBase="webapps">

<Context path="" docBase="ROOT"/>

<Context path="/bbs" docBase="/web/bss"

reloadable="true" crossContext="true"/>

</Host>

<Host name="mail.magedu.com" appBase="/web/mail">

<Context path="/" docBase="ROOT"/>

</Host>

</Engine>

主机别名定义:

如果一个主机有两个或两个以上的主机名,额外的名称均可以以别名的形式进行定义,如下:

<Host name="www.magedu.com" appBase="webapps" unpackWARs="true">

<Alias>magedu.com</Alias>

</Host>

定义Host示例:


六、Context组件:

Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序;如下面的定义:

<!-- Tomcat Root Context -->

<Context path="" docBase="/web/webapps"/>

<!-- buzzin webapp -->

<Context path="/bbs"

docBase="/web/threads/bbs"

reloadable="true">

</Context>

<!-- chat server -->

<Context path="/chat" docBase="/web/chat"/>

<!-- darian web -->

<Context path="/darian" docBase="darian"/>

在Tomcat6中,每一个context定义也可以使用一个单独的XML文件进行,其文件的目录为$CATALINA_HOME/conf/<engine name>/<host name>。可以用于Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。

常用的属性定义有:

1) docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;切记,docBase的路径名不能与相应的Host中appBase中定义的路径名有包含关系,比如,如果appBase为deploy,而docBase绝不能为deploy-bbs类的名字;

2) path:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径;如果context定义在一个单独的xml文件中,此属性不需要定义;

3) reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false;


七、Realm组件

一个Realm表示一个安全上下文,它是一个授权访问某个给定Context的用户列表和某用户所允许切换的角色相关定义的列表。因此,Realm就像是一个用户和组相关的数据库。定义Realm时惟一必须要提供的属性是classname,它是Realm的多个不同实现,用于表示此Realm认证的用户及角色等认证信息的存放位置。

JAASRealm:基于Java Authintication and Authorization Service实现用户认证;

JDBCRealm:通过JDBC访问某关系型数据库表实现用户认证;

JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;

MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;

UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;

下面是一个常见的使用UserDatabase的配置:

<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”

resourceName=”UserDatabase”/>

下面是一个使用JDBC方式获取用户认证信息的配置:

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"

driverName="org.gjt.mm.mysql.Driver"

connectionURL="jdbc:mysql://localhost/authority"

connectionName="test" connectionPassword="test"

userTable="users" userNameCol="user_name"

userCredCol="user_pass"

userRoleTable="user_roles" roleNameCol="role_name" />


八、Valve组件:

Valve类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序。Tomcat6中实现了多种不同的Valve:

AccessLogValve:访问日志Valve

ExtendedAccessValve:扩展功能的访问日志Valve

JDBCAccessLogValve:通过JDBC将访问日志信息发送到数据库中;

RequestDumperValve:请求转储Valve;

RemoteAddrValve:基于远程地址的访问控制;

RemoteHostValve:基于远程主机名称的访问控制;

SemaphoreValve:用于控制Tomcat主机上任何容器上的并发访问数量;

JvmRouteBinderValve:在配置多个Tomcat为以Apache通过mod_proxy或mod_jk作为前端的集群架构中,当期望停止某节点时,可以通过此Valve将用记请求定向至备用节点;使用此Valve,必须使用JvmRouteSessionIDBinderListener;

ReplicationValve:专用于Tomcat集群架构中,可以在某个请求的session信息发生更改时触发session数据在各节点间进行复制;

SingleSignOn:将两个或多个需要对用户进行认证webapp在认证用户时连接在一起,即一次认证即可访问所有连接在一起的webapp;

ClusterSingleSingOn:对SingleSignOn的扩展,专用于Tomcat集群当中,需要结合ClusterSingleSignOnListener进行工作;

RemoteHostValve和RemoteAddrValve可以分别用来实现基于主机名称和基于IP地址的访问控制,控制本身可以通过allow或deny来进行定义,这有点类似于Apache的访问控制功能;如下面的Valve则实现了仅允许本机访问/probe:

<Context path="/probe" docBase="probe">

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="127\.0\.0\.1"/>

</Context>

其中相关属性定义有:

1) className:相关的java实现的类名,相应于分别应该为org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve;

2) allow:以逗号分开的允许访问的IP地址列表,支持正则表达式,因此,点号“.”用于IP地址时需要转义;仅定义allow项时,非明确allow的地址均被deny;

3) deny: 以逗号分开的禁止访问的IP地址列表,支持正则表达式;使用方式同allow;


LNMT的实现:

client -->http --> nginx --> reverse_proxy --> http --> tomcat (http connector)

在另一台主机上启动nginx,在nginx的配置文件中添加以下核心内容,具体步骤略:

location ~* \.(jsp|do)$ {

proxy_pass http://web1.magedu.com:8080;

}


LAMT:

client --> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat {http connector|ajp connector}

反代模块:

主:proxy_module

子:proxy_module_http, proxy_module_ajp 注:httpd向后反向代理的子模块,如果基于ajp协议向后代理,就要使用proxy_module_ajp


httpd实现反代的虚拟机设置(Centos 7)

proxy_module_http:

<VirtualHost *:80>

ServerName web1.magedu.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / http://172.16.100.67:8080/

ProxyPa***everse / http://172.16.100.67:8080/

<Location />

Require all granted

</Location>

</VirtualHost>


http基于ajp协议反代配置

proxy_module_ajp:

<VirtualHost *:80>

ServerName web1.magedu.com

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass /status !  注:访问status页面时不会反代到后端服务器

ProxyPass / ajp://172.16.100.67:8009/

ProxyPa***everse / ajp://172.16.100.67:8009/

<Location />

Require all granted

</Location>

</VirtualHost>


LNAMT:企业中一般不会让tomcat面向用户,都会在tomcat的前段加一个httpd服务器

注:http反代时,会自动调用http模块或者ajp模块

转载于:https://blog.51cto.com/12523910/2060671

tomcat配置与应用(2)相关推荐

  1. eclipse下tomcat配置

    eclipse下tomcat配置整了我一两个小时,呵呵,大家不要笑话,本人对eclipse还是菜鸟! 1.用到的软件 jdk-7u40-windows-i586 EclipseJavaEEIDEfor ...

  2. Rainbond最佳实践:Tomcat配置Redis实现Session共享

    Rainbond:生产级无服务器PaaS Rainbond是国内首个开源的生产级无服务器PaaS,深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术 ...

  3. intellij tomcat配置

    目录 intellij tomcat配置 @(目录) intellij tomcat配置 如上图标注 1 所示,我们可以切换随时为项目切换不同的容器. 如上图标注 2 所示,我们可以指定给运行的容器设 ...

  4. ssl单向tomcat配置webservice访问方法

    tomcat 配置 单向 SSL <Connector port="8443" protocol="org.apache.coyote.http11.Http11P ...

  5. Tomcat 配置WEB虚拟映射 及 配置虚拟主机

    Tomcat  配置WEB虚拟映射 及 配置虚拟主机 配置WEB虚拟映射文件夹有三种方法例如以下: 第一(要重新启动server的): 打开路径 Tomcat 6.0\conf 下的 server.x ...

  6. tomcat android https,tomcat 配置 https, android端 访问

    1.控制台 进入到tomcat 的bin 目录下 执行命令 keytool的命令网上很多解释 生成一个 tomcat.keystore 文件 keytool -genkey -alias tomcat ...

  7. tomcat苹果版安装步骤_mac系统安装apache tomcat配置方法图文详解

    下面,绿茶小乐哥分享mac系统安装apache tomcat配置方法,希望能帮助到大家! tomcat无法取访问appache资源. appache只支持静态网页,但像asp,php,cgi,jsp等 ...

  8. 详解Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...

  9. spring boot实战(第七篇)内嵌容器tomcat配置

    spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / 通过需要用到的就是端口.上下文路径的修改,在spring boot中其修改 ...

  10. jdk和tomcat配置

    一:安装jdk,需要jdk和jre的安装目录一样 二:设置jdk和jre环境变量 JAVA_HOME:C:\Program Files\Java\jdk1.7.0_80 path: %JAVA_HOM ...

最新文章

  1. ubuntu mysql deb_Ubuntu 通过Deb 安装 MySQL 5.5 [转载]
  2. eureka同步原理_eureka原理剖析
  3. 第十一回:琴房外度曲生慕意 书店里软语救阿四[林大帅作品集]
  4. 三个数相减的平方公式_快收好这份小学数学公式大全!孩子遇到数学难题时肯定用得上...
  5. abp dapper mysql_ABP框架—后台:引入Abp.Dapper(10)
  6. 【Tensorflow2.x】设置GPU(内存自增长、指定GPU)
  7. 计算机英语知识竞赛题库,大学生计算机基础知识竞赛题库_大学生计算机基础知识竞赛试题附答案...
  8. ARCore学习指引四剑客:原生、Unity、Unreal和WebAR
  9. GEO、TCGA数据下载慢 下载中断解决办法
  10. 怎么安装python的数据库5.7.28_Windows下mysql-5.7.28下载、安装、配置教程
  11. php异步实现,避免长时间等待
  12. 如何批量在图片上加文字?
  13. Matlab读取Excel各个子表的数据进行拟合
  14. android短信分享,android 短信分享
  15. 我被List中remove()方法的陷阱,坑惨了!
  16. MySQL基础学习笔记——关于KEY的说明
  17. 内存不能为“read”或“written”的解决方案
  18. 【论文笔记之 FDAF and MAF】Frequency-Domain and Multirate Adaptive filtering
  19. Python做一个简单的名片管理系统
  20. 100000行级别数据的 Excel 导入优化之路

热门文章

  1. python语言必背代码-让你的Python代码实现类型提示功能
  2. python 类-python--类
  3. python简单代码hello-[代码全屏查看]-python初学之helloworld
  4. python程序实例电话本-Python示例
  5. 小学生python-小学生学python(五)
  6. python编程入门p-读书笔记 - 《Python编程:从入门到实践》
  7. Linux拷贝排除一个或多个目录的实现方法
  8. lua学习笔试之迭代器和通用for
  9. 监听端口的非阻塞性不具有继承性
  10. 写学生管理系统后的一些感想