tomcat base conf

基础配置

CATALINA\_HOME:代表您的 Tomcat 安装的根目录。如:/usr/local/tomcat CATALINA\_BASE:表示特定 Tomcat 实例的运行时配置的根。如果您想在一台机器上拥有多个 Tomcat 实例,请使用该CATALINA\_BASE 属性 如果将属性设置为不同的位置,则 CATALINA\_HOME 位置包含静态源,例如.jar文件或二进制文件。CATALINA\_BASE 位置包含配置文件、日志文件、部署的应用程序和其他运行时要求
默认情况下,CATALINA\_HOME 和 CATALINA\_BASE 指向同一目录。当您需要在一台机器上运行多个 Tomcat 实例时,手动设置 CATALINA\_BASE。这样做有以下好处:
  • 更轻松地管理升级到更新版本的 Tomcat。因为具有单个 CATALINA\_HOME 位置的所有实例共享一组 .jar文件和二进制文件,所以您可以轻松地将文件升级到更新版本,并将更改传播到使用相同 CATALIA\_HOME 目录的所有 Tomcat 实例。
  • 避免重复相同的静态.jar文件。
  • 共享某些设置的可能性,例如setenvshell 或 bat 脚本文件(取决于您的操作系统)

tomcat目录结构

bin:脚本及启动时用到的类(查找顺序:先检查 CATALINA\_BASE;回退提供给 CATALINA\_HOME) lib:类路径上添加更多资源的目录(查找顺序:先检查 CATALINA\_BASE;CATALINA\_HOME 第二次加载) conf:配置文件 logs:目录实例特定的日志文件 webapps:自动加载的 Web 应用程序的目录,默认部署目录 work:包含用于部署的 Web 应用程序的临时工作目录目录 temp:临时文件使用的 JVM 目录

配置文件说明

server.xml:主配置文件 context.xml:每个 webapp 都可以有专用的配置文件,这些配置文件通常位于 webapp 应用程序目录下的 WEB-INF 目录中,用于定义会话管理器、JDBC 等;conf/context.xml 是为各 webapp 提供默认配置; web.xml:每个 webapp “部署” 之后才能被访问:此文件则用于为所有的 webapp 提供默认部署相关的配置: tomcat-users.xml:用户认证的账号和密码配置文件: catalina.policy:当使用 - security 选项启动 tomcat 实例时会读取此配置文件来实现其安全运行策略; catalina.properties:Java 属性的定义文件,用于设定类加载器路径,以及一些与 JVM 调优相关参数; logging.properties:日志相关的配置信息:
index.jsp –> jasper –> index.jsp.java转换后java代码 –> javac –> index.jsp.class编译后的字节码 –> jvm 都存放在work目录下
日志管理log4j类库来生成日志信息,保存记录

tomcat核心组件 server.xml

每一个组件都由一个JAVA类实现,这些组件大体可分为以下几个类型 顶级组件:Server 服务类组件:Service 连接器组件:http,https,sjp(cpache jserv protocol) 容器类:Engline,Host,Context 内部部署应用程序,应用程序内部的运行的组件,范围越小,优先级越高, 被嵌套类:valve,logger,realm,loader,manager,… 辅助性组件,嵌套在上面某个组件的内部 集群类组件:listener,cluster,… 调度器上解决session sick,上游主机解决,session复制集群 session service存储服务器,共享分发多播的集群,或工作方式
DocumentRoot root 起始根目录 uri / <-> Directiory 与chroot效果 CATALINA\_BASE/webapps/

JSP webapp的组织结构

有特定的组织形式、层次型的目录结构;主要包含了 servlet 代码文件、JSP 页面文件、类文件、部署描述符文件等;
/:webapp的根目录 index.jsp index.html:webapp的首页 WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和contest.xml配置文件 META-INF/:类似于WEB-INF/ classes/:类文件,当前webapp所提供的类 lib/:类文件,当前webapp所提供的类,被打包为jar模式
WEB-INF META-INF功能是相似的,可以有任意一种,WEB-INF是私有的

webapp归档格式

.war: webapp .jar:EJB的类打包文件 .rar:资源适配类打包文件 .ear:企业级webapp
研发 –> 测试 –> 上线
deploying 没有装入相关的类库,JAVA会运行失败

部署(deployment)webapp 相关的操作:

deploy:部署,将 webapp 的源文件旋转于目标目录、配置 tomcat 服务器能够基于 context.xml 文件中定义的路径来访问此 webapp;将其特有类通过 class loader 装载至 tomcat; 有两种方式:
  • 自动部署:auto deploy
  • 手动部署:
    undeploy:反部署,停止 webapp,并从 tomcat 实例拆除其部分文件和部署名 stop:停止,不再向用户提供服务 start:启动处于 “停止” 状态的 webapp redeploy:重新部署

    示例:安全加固

    不建议关闭Port,关闭会影响tomcat脚本关闭tomcat服务 新版本的tomcat,8005仅主机可以访问,可以修改下随机字符串 注意流程,先停止tomcat在修改此值

    server.xml配置文件:默认端口8080

    一般tomcat做为后端服务,不需要开启HTTPS,可以使用反代做HTTPS,这样层次就分开了,工具如nginx或者haproxy

    server.xml配置文件:AJP请求协议

    server.xml配置文件:修改引擎默认虚拟主机

    server.xml配置文件:修改日志功能

    示例:定义一组虚拟主机

    主站一定要定义ROOT目录名

    实例:定义别名URL

    示例:Context添加日志

    对某个Context定义日志名称

    示例:Context中添加访问控制

    示例:版本迭代

    建议使用软链接的方式,便于管理

    示例:启动用角色,让用户扮演角色对tomcat进行管理(此配置仅tomcat才会生效,注意语法格式)

    查看认证文件tomcat-users.xml

    tomcat管理页面

    vim tomcat-users.xml 只有在tomcat启动才会生效,启动时才会被加载
    客户端访问:http://192.168.10.2/manager
    notion image

    服务状态信息

    JVM相关的运行时环境,可以进行调优http://192.168.10.2/manager/status
    notion image

    tomcat虚拟主机管理

    notion image

    示例:反代方式

    1、独立运行tomcat,此方法不推荐 2、一台主机运行nginx –> tomcat(http协议),使用反代,本地tomcat 3、一台主机运行httpd –> tomcat(http协议), 4、一台主机运行httpd –> tomcat(ajp协议)
    是否能做动静分离,需要看站点当时设计规划 若没有这样设计,最后全部反代,而不是只做动态反代

    示例1 nginx –> tomcat

    1、nginx配置
    2、nginx和tomcat在本机,tomcat可直接监听127.1地址即可

    示例2 http –> tomcat

    查看模块
    https://httpd.apache.org/docs/2.4/mod/mod\\_proxy.html#proxypreservehost 启用后,此选项会将来自传入请求的 Host: 行传递给代理主机,而不是ProxyPass行中指定的主机名 通常应打开此选项Off。它在特殊配置中最有用,例如基于代理的大众名称虚拟主机,其中原始主机标头需要由后端服务器评估
    https://www.bocchi.tokyo/2019/05/27/ProxyPreserveHost-when-should-be-on/ 当我们设置ProxyPass /images https://mybackend/images的时候,通过myfrontend服务器发往mybackend的request的Host Header应该是Host: mybackend(后端) 而如果ProxyPreserveHost on,则我们的request的header则回变成Host: myfrontend(前端)
    当ProxyPreserveHost on 时,浏览器使用IP和访问主机名结果都是一样的
    响应报文,代理取得信息头部,插入一个新的首部,并把值当前主机信息 ProxyVia On 控制代理对 Via: HTTP Headers 的使用,它的预期用途是控制沿着代理服务器链的代理请求的流。有关 Via:Headers 行的说明,请参见 RFC 2616(HTTP/1.1),第 14.45 节 如果设置为off,这是默认值,则不执行任何特殊处理。如果请求或回复包含 Via:标头,则它会原封不动地通过。 如果设置为on,则每个请求和回复都会Via:为当前主机添加一个 标题行。 如果设置为full,则每个生成的 Via:标题行都会另外将 Apache 服务器版本显示为Via:注释字段。 如果设置为block,则每个代理请求都将Via:删除其所有标题行。不会Via:生成新的 标题

    使用jsp代理方式

    tomcat启动ajp功能

    AJP相关报错

    解决方法有二种

    配置http

    小结

    热部署 autoDeploy 建议关闭,特别是某些文件更新,可以启停tomcat,也不是绝对,可根据应用场景
    是否能做动静分离,需要看站点当时设计规划 若没有这样设计,最后全部反代,而不是只做动态反代
    Loading...