学习Tomcat这一篇就够了

目录

 


第一章 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历史

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

1.3、Tomcat官网

http://tomcat.apache.org/

第二章 Tomcat单实例安装

2.1、环境准备

  • 虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe
  • 系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网
  • 系统内存大小:1GB
  • 系统硬盘大小:20GB
  • 连接工具版本:SecureCRTSecureFX_HH_x64_7.0.0.326.zip

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/

image-20200906155005379

 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 链接器

AJP协议:

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:用于控制以简单文本的形式进行访问。

启动Tomcat,然后点击host-manager,我是在虚拟机的火狐浏览器中打开的,它不能让别人随意访问,否则会出现安全问题:

image-20200906172949187

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

 启动Tomcat,然后点击manager,我是在虚拟机的火狐浏览器中打开的,它不能让别人随意访问,否则会出现安全问题:

image-20200906173409876

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-15.5.6-16341506.exe
  • 系统镜像版本:CentOS-6.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、集群架构

image-20200906181424604

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
    

    4.6、安装Nginx反向代理服务器

    安装依赖:

    [root@caochenlei ~]# yum install -y gcc gcc-c++ make libtool wget pcre pcre-devel zlib zlib-devel openssl openssl-devel
    

    Nginx下载:

    [root@caochenlei ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
    

    Nginx解压:

    [root@caochenlei ~]# tar -zxvf nginx-1.18.0.tar.gz
    

    Nginx安装:

    [root@caochenlei ~]# cd nginx-1.18.0
    [root@caochenlei nginx-1.18.0]# ./configure
    [root@caochenlei nginx-1.18.0]# make && make install
    

    注意:安装完成后的路径为:/usr/local/nginx

  • Nginx配置:

    [root@caochenlei nginx-1.18.0]# vi /usr/local/nginx/conf/nginx.conf
    

     

 

#在 server 外边配置,负载均衡服务列表
upstream myserver {
	server 192.168.239.144:8080;
	server 192.168.239.144:8081;
}

#在 location / { 里边配置,路径请求转发规则
	proxy_pass http://myserver;
[root@caochenlei nginx-1.18.0]# /usr/local/nginx/sbin/nginx

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

开放防火墙:

[root@caochenlei ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@caochenlei ~]# /etc/rc.d/init.d/iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]

4.7、访问测试

打开IE浏览器输入:http://192.168.206.128/edu/a.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2BNMQdu-1599441221247)(assets/20200829000323.png)]

打开IE浏览器输入: http://192.168.206.128/edu/a.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iX5Eeg6z-1599441221250)(assets/20200829000403.png)]

4.8、如何保证主nginx高可用

请您参考:学习Nginx这一篇就够了中的高可用集群如何搭建的。

原理说明:准备两台Nginx,一主一备,每一台上安装一个keepalived,由keepalived负责监测当前机器上的nginx是否可用(其实是调用一个shell脚本不停的查看进程信息),同时也会在两个keepalived之间进行心跳监测,如果主节点宕机,则从节点自动跟上,访问是通过虚拟IP进行访问的。

4.9、如何解决session共享问题

方案一:ip_hash 策略

通过修改Nginx配置文件,让每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:

image-20200829001054083

方案二:session 复制

在每台Tomcat的 conf/server.xml 配置如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

 在每台Tomcat部署的应用程序中,例如:servlet_demo 的 web.xml 中加入如下配置 :

<distributable/>

注意:上述方案,适用于较小的集群环境(节点数不超过4个),如果集群的节点数比较多的话,通过这种广播的形式来完成Session的复制,会消耗大量的网络带宽,影响服务的性能。

第五章 Tomcat安全问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值