1.前一段时间在自己的云服务器上部署了个tomcat服务器并部署了项目,Tomcat的http请求端口还是使用的8080端口,并开放了外网访问权限,这样在安全性上可能存在漏斗,特此想着修改下Tomcat端口 并学习下tomcat的运行原理.特此记录下,以供以后回顾用(有疏漏的地方,还请看到的同学指出,尽快修改 省得误导了同学们).
2.tomcat端口修改,这个网上一搜就找到了,找到tomcat的安装目录下的conf文件夹,编辑server.xml文件,文件配置如下,需要修改的地方为Connection中http通讯协议的部分port端口 修改为其他没有占用的端口即可(使用netstat -tunlp|grep xxx即可查看该端口号是否被占用)
3.端口修改完毕:来看一下tomcat中运行的基本原理(仅从server.xml配置文件的角度上看,具体代码层面后面的可以看) ,首先我的server.xml配置有哪些内容.如下图
可以看到xml文件Server节点组成,其中涉及到端口的主要有3个位置
1.Server port=“8005” shutdown=“SHUTDOWN” tomcat服务器关闭端口
2.Connector port=“9090” protocol=“HTTP/1.1” connectionTimeout=“20000”
redirectPort=“8443” 此处是service 服务下的 http通讯协议端口 默认为8080,也就是常用的请求tomcat中项目的端口地址,同时还有一个8443端口,这个是用于如果请求时https的接口 重定向端口的位置,同时设置了个超时时间为20000毫秒(也就是20s)
3.同时service服务下还有一个ajp通讯协议的端口Connector port=“8009” protocol=“AJP/1.3” redirectPort=“8443” 这个主要是用于tomcat服务器与其他http服务器之间通讯的端口地址(目前项目中没有涉及到,暂不深究)
上面大体知道了tomcat启用所必须使用的几个端口,如果一个服务器中涉及到多个tomcat服务器,那么服务器之间的端口号要做到不一样,防止发生干扰的情况.最后整体再看一下server.xml配置文件中的其他内容
1.tomcat配置文件中有一部分是作为监听器使用的,但从英文就应该知道其各部分的作用 分别是版本日志监听器,tomcat 虚拟机内存防止溢出监听器,全局资源配置,防止线程溢出监听器
2.这里是全局资源配置的地址,从配置中的tomcat-users.xml文件就可以知道主要是用于tomcat网页管理 的配置信息,主要用于tomcat管理页面用户的权限及账号密码信息配置
3.最后就是server.xml配置文件中的主角,service节点部分,主要是connection监听端口信息部分(包含http协议及ajp通讯协议内容), http通讯协议收到信息交由Egine处理, Egine交由 host虚拟主机进行处理,虚拟主机根据请求路径 寻找context配置的 项目web容器, 交由对应的Servlet处理,进入相关的get post请求方法中,返回 然后交由web容器 host->egine->connection->http请求–>7层osi模型到达用户响应端.
整理一下tomcat接受客户端请求到响应的一个流程
假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp
1. 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2. Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3. Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5. localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6. Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”“的Context去处理)
7. path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10. Context把执行完了之后的HttpServletResponse对象返回给Host
11. Host把HttpServletResponse对象返回给Engine
12. Engine把HttpServletResponse对象返回给Connector
13. Connector把HttpServletResponse对象返回给客户browser
最后:写的有点混乱 因为主要是给自己学习后加深印象及日后复习用的,所以有讲的不对的地方 希望各位同学及时指出,大家共同进步
感谢大佬的资料https://www.cnblogs.com/jobs-lgy/p/8136331.html
对于想要深入了解tomcat的同学很有帮助