tomcat

目录

目录

第一章 Tomcat概述

1.1、Tomcat概述

1.2、Tomcat历史

1.3、Tomcat官网

第二章 Tomcat单实例安装

2.1、环境准备

2.2、Tomcat下载

2.3、Tomcat解压

2.4、Tomcat安装

2.5、Tomcat启动

 2.6、Tomcat关闭

第三章 Tomcat配置文件详解

3.1、server.xml 详解

3.1.1、Server

3.1.2、Listener

3.1.3、GlobalNamingResources

3.1.4、Service

3.1.5、Executor

3.1.6、Connector

3.1.7、Engine

3.1.8、Host

3.1.9、Context

 

3.2、tomcat-users.xml 详解

3.2.1、host-manager应用配置

3.2.2、manager应用配置

3.3、web.xml 详解

3.3.1、ServletContext初始化参数

3.3.3、Servlet配置

3.3.4、Listener配置

3.3.5、Filter配置

3.3.6、欢迎页面配置

3.3.7、错误页面配置

第四章 Tomcat高可用集群

4.1、环境准备

4.2、集群概述

4.3、集群架构

4.4、安装第一台tomcat服务器

4.5、安装第二台tomcat服务器

第五章 Tomcat安全问题

5.1、配置安全

5.2、应用安全

5.3、传输安全


第一章 Tomcat概述

1.1、Tomcat概述

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

1.2、Tomcat历史

omcat 最初由Sun公司的软件架构师 James Duncan Davidson 开发,名称为“JavaWebServer”。
1999年,在 Davidson 的帮助下,该项目于1999年于apache软件基金会旗下的JServ项目合并,并发布第一个版本(3.x),即是现在的Tomcat,该版本实现了Servlet2.2和JSP 1.1规范 。
2001年,Tomcat 发布了4.0版本, 作为里程碑式的版本,Tomcat 完全重新设计了其架构,并实现了Servlet 2.3和JSP 1.2规范。
目前 Tomcat 已经更新到 10.0.x版本,但是目前企业中的Tomcat服务器,主流版本还是7.x 和 8.x,所以本课程是基于 8.5 版本进行讲解。

1.3、Tomcat官网

Apache Tomcat® - Welcome!

第二章 Tomcat单实例安装

2.1、环境准备

虚拟机的版本:VMware-workstation-full-17.exe
系统镜像版本:CentOS-7.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网
系统内存大小:1GB
系统硬盘大小:20GB
 

2.2、Tomcat下载

[root@caochenlei ~]# wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz

2.3、Tomcat解压

[root@caochenlei ~]# tar -zxvf apache-tomcat-8.5.57.tar.gz

2.4、Tomcat安装

[root@caochenlei ~]# mv apache-tomcat-8.5.57 /usr/local/tomcat

2.5、Tomcat启动

注意:Tomcat启动需要Java环境,我这里没有安装,使用的是系统自带的,如果你的系统没有Java环境请自行安装,Java环境安装不再本讲之中!

 启动Tomcat:

[root@caochenlei ~]# /usr/local/tomcat/bin/startup.sh

关闭防火墙:

[root@caochenlei ~]# service iptables stop
[root@caochenlei ~]# chkconfig iptables off

**在浏览器输入:**http://192.168.239.144:8080/

 2.6、Tomcat关闭

[root@caochenlei ~]# /usr/local/tomcat/bin/shutdown.sh

第三章 Tomcat配置文件详解

3.1、server.xml 详解

server.xml 是tomcat 服务器的核心配置文件,包含了Tomcat的 Servlet 容器(Catalina)的所有配置。

3.1.1、Server

Server是server.xml的根元素,用于创建一个Server实例,默认使用的实现类是 org.apache.catalina.core.StandardServer。

<Server port="8005" shutdown="SHUTDOWN">
...
</Server>

标签属性和子元素:

port:Tomcat 监听的关闭服务器的端口。
shutdown:关闭服务器的指令字符串。
Server内嵌的子元素为 Listener、GlobalNamingResources、Service。

3.1.2、Listener

默认配置的5个Listener的含义:

<!‐‐ 用于以日志形式输出服务器 、操作系统、JVM的版本信息 ‐‐>
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<!‐‐ 用于加载(服务器启动) 和 销毁 (服务器停止) APR。 如果找不到APR库, 则会输出日志, 并不影响Tomcat启动 ‐‐>
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

<!‐‐ 用于避免JRE内存泄漏问题 ‐‐>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

<!‐‐ 用户加载(服务器启动) 和 销毁(服务器停止) 全局命名服务 ‐‐>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

<!‐‐ 用于在Context停止时重建Executor 池中的线程, 以避免ThreadLocal 相关的内存泄漏 ‐‐>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
3.1.3、GlobalNamingResources

GlobalNamingResources中定义了全局命名服务:

<GlobalNamingResources>
	<!‐‐ 可编辑的用户数据库,UserDatabaseRealm也可以使用该数据库对用户进行身份验证 ‐‐>
	<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>

3.1.4、Service

该元素用于创建 Service 实例,默认使用 org.apache.catalina.core.StandardService。默认情况下,Tomcat 仅指定了Service 的名称, 值为 “Catalina”。Service 可以内嵌的元素为 : Listener、Executor、Connector、Engine,其中 : Listener 用于为Service添加生命周期监听器, Executor 用于配置Service 共享线程池,Connector 用于配置Service 包含的链接器, Engine 用于配置Service中链接器对应的Servlet 容器引擎。一个Server服务器,可以包含多个Service服务。

<Service name="Catalina">
...
</Service>
3.1.5、Executor

默认情况下,Service 并未添加共享线程池配置。 如果我们想添加一个线程池, 可以在 下添加如下配置:

<Executor   name="tomcatThreadPool" 
			namePrefix="catalina‐exec‐" 
			maxThreads="200" 
			minSpareThreads="100" 
			maxIdleTime="60000" 
			maxQueueSize="Integer.MAX_VALUE" 
			prestartminSpareThreads="false" 
			threadPriority="5"
			className="org.apache.catalina.core.StandardThreadExecutor" />

标签属性和子元素:

name:线程池名称,用于Connector中指定。
namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。
maxThreads:池中最大线程数。
minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改, 否则会有请求不会被处理的情况发生。
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。 默认值为false,即不启动。
threadPriority:线程池中线程优先级,默认值为5,值从1到10。
className:线程池实现类,未指定情况下,默认实现类为 org.apache.catalina.core.StandardThreadExecutor。 如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口。

3.1.6、Connector

Connector 用于创建链接器实例。默认情况下,server.xml 配置了两个链接器,一个支持HTTP协议,一个支持AJP协议。因此大多数情况下,我们并不需要新增链接器配置, 只是根据需要对已有链接器进行优化。

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

标签属性和子元素:

port:端口号,Connector 用于创建服务端Socket 并进行监听, 以等待客户端请求链接。如果该属性设置为0,Tomcat将会随机选择一个可用的端口号给当前Connector使用。

protocol:当前Connector 支持的访问协议。 默认为 HTTP/1.1,并采用自动切换机制选择一个基于 JAVA NIO 的链接器或者基于本地APR的链接器(根据本地是否含有Tomcat的本地库判定)。如果不希望采用上述自动切换的机制, 而是明确指定协议, 可以使用以下值。

Http协议:

org.apache.coyote.http11.Http11NioProtocol  ,非阻塞式 Java NIO 链接器
org.apache.coyote.http11.Http11Nio2Protocol ,非阻塞式 JAVA NIO2 链接器
org.apache.coyote.http11.Http11AprProtocol  ,APR 链接器

AJR协议

org.apache.coyote.ajp.AjpNioProtocol  ,非阻塞式 Java NIO 链接器
org.apache.coyote.ajp.AjpNio2Protocol ,非阻塞式 JAVA NIO2 链接器
org.apache.coyote.ajp.AjpAprProtocol  ,APR 链接器

connectionTimeout:Connector接收连接后的等待超时时间, 单位为毫秒。 -1 表示不超时。

redirectPort:当前Connector 不支持SSL请求, 接收到了一个请求, 并且也符合 security-constraint 约束, 需要SSL传输,Catalina自动将请求重定向到指定的端口。

executor:指定共享线程池的名称, 也可以通过maxThreads、minSpareThreads 等属性配置内部线程池。

URIEncoding:用于指定编码URI的字符编码, Tomcat8.x版本默认的编码为UTF-8 , Tomcat7.x版本默认为ISO-8859-1。

maxThreads:池中最大线程数。

minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。

acceptCount:接收的连接数。

maxConnections:接收的最大连接数。

compression:是否压缩。

compressionMinSize:压缩的大小。

disableUploadTimeout:禁用上传超时。

完整的配置如下:

<Connector  port="8080" 
			protocol="HTTP/1.1" 
			connectionTimeout="20000" 
			redirectPort="8443" 
			executor="tomcatThreadPool" 
			URIEncoding="UTF‐8"
			maxThreads="1000" 
			minSpareThreads="100" 
			acceptCount="1000" 
			maxConnections="1000" 
			compression="on" 
			compressionMinSize="2048"
			disableUploadTimeout="true" />
3.1.7、Engine

Engine 作为Servlet 引擎的顶级元素,内部可以嵌入: Cluster、Listener、Realm、 Valve和Host。

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

标签属性和子元素:

name: 用于指定Engine的名称, 默认为Catalina 。该名称会影响一部分Tomcat的存储路径(如临时文件)。
defaultHost : 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交由默认的虚拟主机处理, 默认为localhost。

3.1.8、Host

Host 元素用于配置一个虚拟主机, 它支持以下嵌入元素:Alias、Cluster、Listener、Valve、Realm、Context。

如果在Engine下配置Realm, 那么此配置将在当前Engine下的所有Host中共享。 同样,如果在Host中配置Realm , 则在当前Host下的所有Context中共享。

Context中的Realm优先级 > Host 的Realm优先级 > Engine中的Realm优先级。

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
	...
</Host>

标签属性和子元素:

name:当前Host通用的网络名称,必须与DNS服务器上的注册信息一致。 Engine中包含的Host必须存在一个名称与Engine的defaultHost设置一致。
appBase:当前Host的应用基础目录,当前Host上部署的Web应用均在该目录下(可以是绝对目录,相对路径),默认为webapps。
unpackWARs:设置为true,Host在启动时会将appBase目录下war包解压为目录。设置为false, Host将直接从war文件启动。
autoDeploy:控制tomcat是否在运行时定期检测并自动部署新增或变更的web应用。
通过给Host添加别名,我们可以实现同一个Host拥有多个网络名称,配置如下:

<Host name="www.web1.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Alias>www.web2.com</Alias>
</Host>

这个时候,我们就可以通过两个域名访问当前Host下的应用(需要确保DNS或hosts中添加了域名的映射配置)。

3.1.9、Context

 Context 用于配置一个Web应用,默认的配置如下:

<Context docBase="myApp" path="/myApp">
	....
</Context>

 

标签属性和子元素:

docBase:Web应用目录或者War包的部署路径。可以是绝对路径,也可以是相对于Host appBase的相对路径。
path:Web应用的Context 路径。如果我们Host名为localhost, 则该web应用访问的根路径为: http://localhost:8080/myApp。
它支持的内嵌元素为:CookieProcessor, Loader, Manager,Realm,Resources,WatchedResource,JarScanner,Valve。
简单的举例:

<Host name="www.tomcat.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Context docBase="D:\servlet_project" path="/myApp"></Context>
	<Valve  className="org.apache.catalina.valves.AccessLogValve" 
			directory="logs" 
			prefix="localhost_access_log" 
			suffix=".txt" 
			pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

 

3.2、tomcat-users.xml 详解

该配置文件中,主要配置的是Tomcat的用户,角色等信息,用来控制Tomcat中 host-manager、manager的访问权限。

从早期的Tomcat版本开始,就提供了Web版的管理控制台,他们是两个独立的Web应用,位于webapps目录下。Tomcat 提供的管理应用有用于管理的Host的host-manager 和用于管理Web应用的manager。

3.2.1、host-manager应用配置

Tomcat启动之后,可以通过 http://localhost:8080/host-manager/html 访问该Web应用。 host-manager 默认添加了访问权限控制,当打开网址时,需要输入用户名和密码(conf/tomcat-users.xml中配置) 。所以要想访问该页面,需要在conf/tomcat-users.xml 中配置,并分配对应的角色:

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="123456" roles="admin-gui,admin-script"/>

标签属性和子元素:

  • admin-gui:用于控制页面访问权限。
  • admin-script:用于控制以简单文本的形式进行访问。
3.2.2、manager应用配置

manager的访问地址为 http://localhost:8080/manager,同样,manager也添加了页面访问控制,所以要想访问该页面,需要在conf/tomcat-users.xml 中配置,并分配对应的角色:

<role rolename="admin‐gui" />
<role rolename="admin‐script" />
<role rolename="manager‐gui" />
<role rolename="manager‐script" />
<user username="admin" password="123456" roles="admin-script,admin-gui,manager-gui,manager-script" />

 

3.3、web.xml 详解

web.xml 是web应用的描述文件, 它支持的元素及属性来自于Servlet 规范定义 。 在Tomcat 中, Web 应用的描述信息包括 tomcat/conf/web.xml 中默认配置以及 Web应用 WEB-INF/web.xml 下的定制配置。

3.3.1、ServletContext初始化参数

我们可以通过 添加ServletContext 初始化参数,它配置了一个键值对,这样我们可以在应用程序中使用 javax.servlet.ServletContext.getInitParameter()方法获取参数。举例如下:

<context‐param>
	<param‐name>contextConfigLocation</param‐name>
	<param‐value>classpath:applicationContext‐*.xml</param‐value>
	<description>Spring Config File Location</description>
</context‐param>

 

 

标签属性和子元素:

param‐name:初始化参数名称。
param‐value:初始化参数的值。
description:这个参数的描述信息。
3.3.2、会话配置
用于配置Web应用会话,包括 超时时间、Cookie配置以及会话追踪模式。它将覆盖server.xml 和 context.xml 中的配置。举例如下:

<session-config>
	<session-timeout>30</session‐timeout>
	<cookie-config>
		<name>JESSIONID</name>
		<domain>www.baidu.cn</domain>
		<path>/</path>
		<comment>Session Cookie</comment>
		<http-only>true</http‐only>
		<secure>false</secure>
		<max-age>3600</max‐age>
	</cookie‐config>
	<tracking-mode>COOKIE</tracking‐mode>
</session‐config>

 

标签属性和子元素:

session-timeout: 会话超时时间,单位:分钟。
cookie-config:用于配置会话追踪Cookie。
name:Cookie的名称。
domain:Cookie的域名。
path:Cookie的路径。
comment:Cookie的注释。
http-only:Cookie只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增 加网站访问的安全性。
secure:此Cookie只能通过HTTPS连接传递到服务器,而HTTP连接则不会传递该信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。
max-age:以秒为单位表示cookie的生存期,默认为‐1表示是会话Cookie,浏览器 关闭时就会消失。
tracking-mode:用于配置会话追踪模式,Servlet3.0版本中支持的追踪模式: COOKIE、URL、SSL。

3.3.3、Servlet配置

Servlet 的配置主要是两部分, servlet 和 servlet-mapping :

<servlet>
	<servlet-name>myServlet</servlet‐name>
	<servlet-class>com.caochenlei.MyServlet</servlet‐class>
	<init-param>
		<param-name>fileName</param‐name>
		<param-value>init.conf</param‐value>
	</init‐param>
	<load-on-startup>1</load‐on‐startup>
	<enabled>true</enabled>
</servlet>
<servlet-mapping>
	<servlet-name>myServlet</servlet‐name>
	<url-pattern>*.do</url‐pattern>
	<url-pattern>/myservet/*</url‐pattern>
</servlet‐mapping>

标签属性和子元素:

servlet:

servlet-name:指定servlet的名称, 该属性在web.xml中唯一。
servlet-class:用于指定servlet类名。
init-param:用于指定servlet的初始化参数, 在应用中可以通过 HttpServlet.getInitParameter 获取。
param-name:初始化参数名称。
param-value:初始化参数的值。
load-on-startup:用于控制在Web应用启动时,Servlet的加载顺序, 值小于0,web应用启动时,不加载该servlet,第一次访问时加载。
enabled:若为false,表示Servlet不处理任何请求。
servlet-mapping:

servlet-name:你想要让哪个servlet处理,这里就写哪个servlet名称。
url-pattern:用于指定URL表达式,一个 servlet‐mapping可以同时配置多个 url‐ pattern。
servlet 中文件上传配置:

<servlet>
	<servlet-name>uploadServlet</servlet‐name>
	<servlet-class>com.caochenlei.UploadServlet</servlet‐class>
	<multipart-config>
		<location>C://path</location>
		<max-file-size>10485760</max‐file‐size>
		<max-request-size>10485760</max‐request‐size>
		<file-size-threshold>0</file‐size‐threshold>
	</multipart‐config>
</servlet>

 

标签属性和子元素:

multipart-config:上传的配置
location:存放生成的文件地址。
max-file-size:允许上传的文件最大值。 默认值为‐1, 表示没有限制。
max-request-size:针对该 multi/form‐data 请求的最大数量,默认值为‐1, 表示无限制。
file-size-threshold:当数量量大于该值时, 内容会被写入文件。

3.3.4、Listener配置

Listener用于监听servlet中的事件,例如context、request、session对象的创建、修改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对context、request、session对象的生命周期进行监控。在servlet2.5规范中共定义了8中Listener。在启动时,ServletContextListener 的执行顺序与web.xml 中的配置顺序一致, 停止时执行顺序相反。

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener‐class>
</listener>

标签属性和子元素:

  • listener-class:用于指定监听的类,该类必须实现Listener接口。
3.3.5、Filter配置

filter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:

<filter>
	<filter-name>myFilter</filter‐name>
	<filter-class>com.caochenlei.MyFilter</filter‐class>
	<async-supported>true</async‐supported>
	<init-param>
		<param-name>language</param‐name>
		<param-value>CN</param‐value>
	</init‐param>
</filter>
<filter-mapping>
	<filter-name>myFilter</filter‐name>
	<url-pattern>/*</url‐pattern>
</filter‐mapping>

 

标签属性和子元素:

filter:

filter-name:用于指定过滤器名称,在web.xml中,过滤器名称必须唯一。
filter-class:过滤器的全限定类名,该类必须实现Filter接口。
async-supported:该过滤器是否支持异步。
init-param:用于配置Filter的初始化参数, 可以配置多个, 可以通过FilterConfig.getInitParameter获取。
param-name:初始化参数名称。
param-value:初始化参数的值。
filter-mapping:

filter-name:这里指的是你想使用哪个过滤器进行过滤就写哪个过滤器的名称。
url-pattern:指定该过滤器需要拦截的URL。

 

3.3.6、欢迎页面配置

welcome-file-list 用于指定web应用的欢迎文件列表。尝试请求的顺序,从上到下。

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

 

3.3.7、错误页面配置

error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

<error-page>
	<error-code>404</error‐code>
	<location>/404.html</location>
</error‐page>
<error-page>
	<error-code>500</error‐code>
	<location>/500.html</location>
</error‐page>
<error-page>
	<exception-type>java.lang.Exception</exception‐type>
	<location>/error.jsp</location>
</error‐page>

 

第四章 Tomcat高可用集群

4.1、环境准备

虚拟机的版本:VMware-workstation-full-17.exe
系统镜像版本:CentOS-7.10-x86_64-bin-DVD1.iso
系统内存大小:1GB
系统硬盘大小:20GB
连接工具版本:SecureCRTSecureFX_HH_x64_7.0.0.326.zip

4.2、集群概述

由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat的集群,而目前比较流程的做法就是通过Nginx来实现Tomcat集群的负载均衡。

4.3、集群架构

 

4.4、安装第一台tomcat服务器

解压:

[root@caochenlei ~]# tar -zxvf apache-tomcat-8.5.57.tar.gz

安装:

[root@caochenlei ~]# mv apache-tomcat-8.5.57 /usr/local/tomcat1

创建测试目录和页面:

[root@caochenlei ~]# mkdir -p /usr/local/tomcat1/webapps/edu
[root@caochenlei ~]# echo "<h1>This is 8080 Port</h1>" > /usr/local/tomcat1/webapps/edu/a.html

开放防火墙:

[root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
[root@caochenlei ~]# /etc/rc.d/init.d/iptables save

启动:

[root@caochenlei ~]# /usr/local/tomcat1/bin/startup.sh

4.5、安装第二台tomcat服务器

解压:

[root@caochenlei ~]# tar -zxvf apache-tomcat-8.5.57.tar.gz

安装:

[root@caochenlei ~]# mv apache-tomcat-8.5.57 /usr/local/tomcat2

 

修改端口:

  • 先删除:
[root@caochenlei ~]# rm -f /usr/local/tomcat2/conf/server.xml

  再添加:

[root@caochenlei ~]# vi /usr/local/tomcat2/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8015" shutdown="SHUTDOWN">
	<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
	<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
	<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
	<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
	<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

	<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="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Engine name="Catalina" defaultHost="localhost">
			<Realm className="org.apache.catalina.realm.LockOutRealm">
				<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
			</Realm>
			<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
				<Valve  className="org.apache.catalina.valves.AccessLogValve" 
						directory="logs" 
						prefix="localhost_access_log" 
						suffix=".txt" 
						pattern="%h %l %u %t &quot;%r&quot; %s %b" />
			</Host>
		</Engine>
	</Service>
</Server>

创建测试目录和页面:

[root@caochenlei ~]# mkdir -p /usr/local/tomcat2/webapps/edu
[root@caochenlei ~]# echo "<h1>This is 8081 Port</h1>" > /usr/local/tomcat2/webapps/edu/a.html 

开放防火墙:

[root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT
[root@caochenlei ~]# /etc/rc.d/init.d/iptables save

启动:

[root@caochenlei ~]# /usr/local/tomcat2/bin/startup.sh

Nginx命令:

普通启动服务:/usr/local/nginx/sbin/nginx
配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
暴力停止服务:/usr/local/nginx/sbin/nginx -s stop
优雅停止服务:/usr/local/nginx/sbin/nginx -s quit
检查配置文件:/usr/local/nginx/sbin/nginx -t
重新加载配置:/usr/local/nginx/sbin/nginx -s reload
查看相关进程:ps -ef | grep nginx

第五章 Tomcat安全问题

5.1、配置安全

删除webapps目录下的所有文件
禁用tomcat管理界面
注释或删除tomcat-users.xml文件内的所有用户权限
更改关闭tomcat指令或禁用
定义错误页面

5.2、应用安全

在大部分的Web应用中,特别是一些后台应用系统,都会实现自己的安全管理模块(权 限模块),用于控制应用系统的安全访问,基本包含两个部分:认证(登录/单点登录) 和授权(功能权限、数据权限)两个部分。对于当前的业务系统,可以自己做一套适用 于自己业务系统的权限模块,也有很多的应用系统直接使用一些功能完善的安全框架, 将其集成到我们的web应用中,如:SpringSecurity、Apache Shiro等。

5.3、传输安全

HTTPS的全称是超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种网络安全传输协议。在HTTP的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。

SSL 和 TLS 是用于网络通信安全的加密协议,它允许客户端和服务器之间通过安全链接 通信。SSL 协议的3个特性:

保密:通过SSL链接传输的数据时加密的。
鉴别:通信双方的身份鉴别,通常是可选的,单至少有一方需要验证。
完整性:传输数据的完整性检查。
从性能角度考虑,加解密是一项计算昂贵的处理,因为尽量不要将整个Web应用采用SSL 链接, 实际部署过程中, 选择有必要进行安全加密的页面(存在敏感信息传输的页面) 采用SSL通信。

HTTPS和HTTP的区别主要为以下四点:

HTTPS协议需要到证书颁发机构CA申请SSL证书,然后与域名进行绑定,HTTP不用申请证书。
HTTP是超文本传输协议,属于应用层信息传输,HTTPS则是具有SSL加密传安全性传输协议,对数据的传输进行加密,相当于HTTP的升级版。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是8080,后者是8443。
HTTP的连接很简单,是无状态的、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
HTTPS协议优势:

提高网站排名,有利于SEO。谷歌已经公开声明两个网站在搜索结果方面相同,如果 一个网站启用了SSL,它可能会获得略高于没有SSL网站的等级,而且百度也表明对安装了SSL的网站表示友好。因此,网站上的内容中启用SSL都有明显的SEO优势。
隐私信息加密,防止流量劫持。特别是涉及到隐私信息的网站,互联网大型的数据泄露的事件频发发生,网站进行信息加密势在必行。
浏览器受信任。 自从各大主流浏览器大力支持HTTPS协议之后,访问HTTP的网站都会提示“不安全”的警告信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值