tomcat安装配置及相关实验

一、tomcat的安装

1、yum安装
# yum install tomcat tomcat-admin-webapps tomcat-webapps
# systemctl start tomcat.service
# ss -tanl
LISTEN 0 100 :::8009
LISTEN 0 100 :::8080
2、编译安装
# tar xf apache-tomcat-8.5.42.tar.gz -C /usr/local
# cd /usr/local
# ln -sv apache-tomcat-8.5.42/ tomcat
"tomcat" -> "apache-tomcat-8.5.42/"
# cd tomcat
# cd bin
# ./catalina.sh --help
# ./catalina.sh version
# ./catalina.sh start
# ss -tanlp 
# ./catalina.sh stop
# ./startup.sh
# ./shutdown.sh
#建立系统账号
# useradd -r java 
# chown -R java.java ./* 
# su - java -c '/usr/local/tomcat/bin/catalina.sh start'
# ps -aux | grep tomcat

二、tomcat配置详解

1、server.xml

<?xml version="1.0" encoding="UTF-8"?>
//<Server port="8005" shutdown="SHUTDOWN"> 
//8005是Tomcat的管理端口,默认监听在127.0.0.1上。SHUTDOWN为关闭此Server。验证:telnet 127.0.0.1 8005。这个管理功能建议禁用,改shutdown为一串猜不出的字符串。
<Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">
 	<Service name="Catalina">
 		<Connector port="8080" protocol="HTTP/1.1"
 			connectionTimeout="20000"
 			redirectPort="8443" />
 		<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 		<Engine name="Catalina" defaultHost="localhost">
 			<Host name="localhost" appBase="webapps"
 				unpackWARs="true" autoDeploy="true">
 			</Host>
 		</Engine>
 	</Service>
</Server>
 <GlobalNamingResources>
 	<!-- Editable user database that can also be used by
 		UserDatabaseRealm to authenticate users
 	-->
 	<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>

用户认证,配置文件是conf/tomcat-users.xml。
打开tomcat-users.xml,我们需要一个角色manager-gui。

<tomcat-users xmlns="http://tomcat.apache.org/xml"
 		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 		xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
 		version="1.0">
 	<role rolename="manager-gui"/>
 	<user username="wayne" password="wayne" roles="manager-gui"/>
</tomcat-users>

Tomcat启动加载后,这些内容是常驻内存的。如果配置了新的用户,需要重启Tomcat。
访问manager的时候告诉403,提示中告诉去manager的context.xml中修改
2、文件路径/usr/local/tomcat/webapps/manager/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
 	<Valve className="org.apache.catalina.valves.RemoteAddrValve"
 		allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
 	<Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$Lru
Cache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

看正则表达式就知道是本地访问了,由于当前访问地址是192.168.x.x,可以修改正则为

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+"

再次测试,成功。

<Service name="Catalina">

一般情况下,一个Server实例配置一个Service,name属性相当于该Service的ID。

连接器配置。
redirectPort,如果访问HTTPS协议,自动转向这个连接器。但大多数时候,Tomcat并不会开启HTTPS,因为Tomcat往往部署在内部,HTTPS性能较差。

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

虚拟主机配置。
name必须是主机名,用主机名来匹配。
appBase,当期主机的网页根目录,相对于CATALINA_HOME,也可以使用绝对路径
unpackWARs是否自动解压war格式
autoDeploy 热部署,自动加载并运行应用
3、Context配置

<Context path="/test" docBase="/data/test" reloadable="" />

path指的是访问的路径
docBase,可以是绝对路径,也可以是相对路径(相对于Host的appBase)
reloadable,true表示如果WEB-INF/classes或META-INF/lib目录下.class文件有改动,就会将WEB应用重新加载。
生成环境中,会使用false来禁用。
将~/projects/myapp/下面的项目文件复制到/data/下

# cp -r ~/projects/myapp /data/myappv1
# cd /data
# # ln -sv myappv1 test

可以修改一下index.jsp好区别一下。
Tomcat的配置文件server.xml中修改如下:

 	<Host name="node1.magedu.com" appBase="/data/webapps"
 			unpackWARs="true" autoDeploy="true" >
 		<Context path="/test" docBase="/data/test" reloadable="" />
 	</Host>

使用http://node1.magedu.com:8080/test/
注意:这里特别使用了软链接,原因就是以后版本升级,需要将软链接指向myappv2,重启Tomcat。如果新版上
线后,出现问题,重新修改软链接到上一个版本的目录,并重启,就可以实现回滚。

三、tomcat实现过程详解

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
	<Service name="Catalina">
 		<Connector port="8080" protocol="HTTP/1.1"
 			connectionTimeout="20000"
 			redirectPort="8443" />
 		<Connector port="8009" protocol="AJP/1.3" 			redirectPort="8443" />
		<Engine name="Catalina" defaultHost="localhost">
			<Host name="localhost" appBase="webapps"
				unpackWARs="true" autoDeploy="true">
 			</Host>
	 	</Engine>
 	</Service>
</Server>

假设来自客户的请求为:http://localhost:8080/test/index.jsp
1、浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1 Connector获得此请求。
2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
3、Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host。

4、Engine匹配到名为localhost的Host。即使匹配不到也把请求交给该Host处理,因为该Host被定义 为该Engine的默认主机
5、localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
6、Host匹配到路径为/test的Context

7、path=/test的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
8、Context匹配到URL PATTERN为 .jsp 的servlet,对应于JspServlet类构造***HttpServletRequest 对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。

9、Context把执行完了之后的HttpServletResponse对象返回给Host
10、Host把HttpServletResponse对象返回给Engine
11、Engine把HttpServletResponse对象返回给Connector
12、Connector把HttpServletResponse对象返回给浏览器端

四、相关实验案例

1、默认情况下,/usr/local/tomcat/webapps/ROOT/下添加一个index.html文件,观察访问到了什么?

将/usr/local/tomcat/conf/web.xml中的下面<welcome-file-list>标签内容(默认页),复制到/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中,如下:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
 		http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 	version="3.1"
 	metadata-complete="true">
 	
 	<display-name>Welcome to Tomcat</display-name>
	<description>
 		Welcome to Tomcat
 	</description>
 		<welcome-file-list>
 			<welcome-file>index.jsp</welcome-file>
 			<welcome-file>index.htm</welcome-file>
 			<welcome-file>index.html</welcome-file>
 		</welcome-file-list>
</web-app>

配置修改后,观察首页变化

2、添加一个文件test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
 	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
 	<meta charset="utf-8">
 	<title>jsp例子</title>
</head>
<body>
//后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println("hello jsp");
%>
</body>
</html>

先把test.jsp放到ROOT下去,试试看,访问 http://YourIP:8080/test.jsp 。

立即可以看到,这是通过路径映射找到相应的test.jsp后,转换成test_jsp.java,在编译成test_jsp.class。/usr/local/tomcat/work/Catalina/localhost/ROOT/org/apache/jsp下有转换后的文件。

3、模拟部署一个应用
# cd 
# mkdir projects/myapp/{WEB-INF,classes,lib} -pv #常见开发项目目录组成
# vi projects/myapp/index.jsp #常见应用首页,内容就用上面的test.jsp
# cp -r projects/myapp/ /usr/local/tomcat/webapps/ #手动复制项目目录到webapps目录下去

使用http://YourIP:8080/myapp/访问试试看

4、虚拟主机配置实验

尝试再配置一个虚拟主机,并将myapp部署到/data/webapps目录下

<Host name="node1.magedu.com" appBase="/data/webapps/" unpackWARs="True" autoDeploy="false" />
# mkdir /data/webapps -p #常见虚拟主机根目录
# cp -r ~/projects/myapp/ /data/webapps/ROOT
# pwd
/usr/local/tomcat
# bin/shutdown.sh
# bin/startup.sh

刚才在虚拟主机中主机名定义node1.magedu.com,所以需要主机在本机手动配置一个域名解析。
如果是windows,修改在C:\Windows\System32\drivers\etc下的hosts文件,需要管理员权限。
使用http://node1.magedu.com:8080/访问试试看。

五、Nginx和Tomcat实战案例

1、nginx安装(epel)
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum install nginx -y
# cd /etc/nginx
# vim nginx.conf
# nginx -t
2、全部反向代理测试
location / {
 # 	proxy_pass http://127.0.0.1:8080; # 不管什么请求,都会访问后面的localhost虚拟主机
 	proxy_pass http://node1.magedu.com:8080; # 修改服务器的/etc/hosts
}

http://192.168.142.151/或者http://node1.magedu.com/全部代理给了自定义的虚拟主机

3、动静分离代理
location / {
 	root /data/webapps/ROOT;
 	index index.html;
}
location ~* \.jsp$ {
 	proxy_pass http://node1.magedu.com:8080; # /etc/hosts
}

在/data/webapps/ROOT目录下增加一个index.html。
http://192.168.142.140/和http://192.168.142.140/index.jsp测试一下看看。
但是实际上Tomcat不太适合做动静分离,它的管理程序的图片不好做动静分离部署。

4、应用管理
# 全部反向代理
location / {
 proxy_pass http://127.0.0.1:8080; # 不管什么请求,都会访问后面的localhost虚拟主机
}

点击Tomcat首页的右上角的“Manager App”按钮,弹出登录对话框。
(1)管理界面
Applications 应用程序管理,可以启动、停止、重加载、反部署、清理过期session
Deploy 可以热部署,也可以部署war文件。
(2)Host Manager虚拟主机管理配置如下:

<tomcat-users xmlns="http://tomcat.apache.org/xml"
 		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 		xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
 		version="1.0">
 	<role rolename="manager-gui"/>
 	<role rolename="admin-gui" />
 	<user username="wayne" password="wayne" roles="manager-gui,admin-gui"/>
</tomcat-users>

重启Tomcat,点击“Host Manager”按钮
可以新增虚拟主机。

六、httpd和Tomcat实战案例

# yum install httpd -y
# httpd -M
# vim /etc/httpd/conf.d/

httpd配置:

1、proxy_http_module模块代理配置

```bash
<VirtualHost *:80>
 	ServerName node1.magedu.com
 	ProxyRequests Off
 	ProxyVia On
 	ProxyPreserveHost On
	ProxyPass / http://127.0.0.1:8080/
 	ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

ProxyRequests:Off关闭正向代理。
ProxyPass:反向代理指令
ProxyPassReverse:保留代理的response头不重写(个别除外)
ProxyPreserveHost:On开启。让代理保留原请求的Host首部
ProxyVia:On开启。代理的请求响应时提供一个response的via首部

# vim /etc/httpd/conf.d/http-tomcat.conf
# httpd -t
# systemctl start httpd
# /usr/local/tomcat/bin/startup.sh

http://192.168.142.140/
http://node1.magedu.com/
http://node1.magedu.com/index.jsp
以上3个URL看到了不同的页面,说明 ProxyPreserveHost On 起了作用。
设置 ProxyPreserveHost Off 再看效果,说明什么?

2、proxy_ajp_module模块代理配置
<VirtualHost *:80>
 	ServerName node1.magedu.com
 	ProxyRequests Off
 	ProxyVia On
 	ProxyPreserveHost On
 	ProxyPass / ajp://127.0.0.1:8009/
</VirtualHost>

查看Server Status可以看到确实使用的是ajp连接了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值