Tomcat中Server.xm配置文件解析及端口修改

1.前一段时间在自己的云服务器上部署了个tomcat服务器并部署了项目,Tomcat的http请求端口还是使用的8080端口,并开放了外网访问权限,这样在安全性上可能存在漏斗,特此想着修改下Tomcat端口 并学习下tomcat的运行原理.特此记录下,以供以后回顾用(有疏漏的地方,还请看到的同学指出,尽快修改 省得误导了同学们).

2.tomcat端口修改,这个网上一搜就找到了,找到tomcat的安装目录下的conf文件夹,编辑server.xml文件,文件配置如下,需要修改的地方为Connection中http通讯协议的部分port端口 修改为其他没有占用的端口即可(使用netstat -tunlp|grep xxx即可查看该端口号是否被占用)

  <Connector port="xxx" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

在这里插入图片描述
修改前后对比在这里插入图片描述
在这里插入图片描述

3.端口修改完毕:来看一下tomcat中运行的基本原理(仅从server.xml配置文件的角度上看,具体代码层面后面的可以看) ,首先我的server.xml配置有哪些内容.如下图

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" 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="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" 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" />			   
	    <Context docBase="/usr/local/store/upload" path="/pv_webT/upload" reloadable="true"/>
		<Context docBase="/usr/local/store/Pdf" path="/pv_webT/Pdf" reloadable="true"/>
      </Host>	  
    </Engine>
  </Service>
</Server>

可以看到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 虚拟机内存防止溢出监听器,全局资源配置,防止线程溢出监听器

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

2.这里是全局资源配置的地址,从配置中的tomcat-users.xml文件就可以知道主要是用于tomcat网页管理 的配置信息,主要用于tomcat管理页面用户的权限及账号密码信息配置
<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>

3.最后就是server.xml配置文件中的主角,service节点部分,主要是connection监听端口信息部分(包含http协议及ajp通讯协议内容), http通讯协议收到信息交由Egine处理, Egine交由 host虚拟主机进行处理,虚拟主机根据请求路径 寻找context配置的 项目web容器, 交由对应的Servlet处理,进入相关的get post请求方法中,返回 然后交由web容器 host->egine->connection->http请求–>7层osi模型到达用户响应端.

<Service name="Catalina">
    <Connector port="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" 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" />			   
	    <Context docBase="/usr/local/store/upload" path="/pv_webT/upload" reloadable="true"/>
		<Context docBase="/usr/local/store/Pdf" path="/pv_webT/Pdf" reloadable="true"/>
      </Host>	  
    </Engine>
  </Service>

整理一下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的同学很有帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值