java技术基础,tomcat核心和配置,(第37天)
编程语言:
系统级:C, C++, go, erlang
应用级:C#, Java, Python, Perl, Ruby, php
语言的虚拟机:jvm, pvm,该虚拟机提供自己语言的运行时环境
动态网站:asp.net(C#), jsp(java), Django, Flask,
tips:
C语言写出来的程序,如果调用准寻POSIX规范的API,则可以达到一次编写,到处编译,也就是在各个不同的系统上编译。
动态网站:
客户端动态:applet
服务器动态:CGI,通用网关接口
webapp server: webapp服务
jsp: tomcat, jboss, jetty
php: php-fpm
Java编程语言:
SUN, James Gosling, Green Project, Oak, Java, SunWorld
1995: Java 1.0, Write Once, Run Anywhere
1996: JDK (Java Development Kit),包含一个JVM(Sun Classic VM)
JDK 1.0: JVM, Applet, AWT
1997:JDK 1.1
JAR文档格式、JDBC、JavaBeans
1998:JDK 1.2
Sun把Java技术分拆为三个方向:Java 2
J2SE: Standard Edition
J2EE:Enterprise Edition 企业版java
J2ME:Mobile Edition 已废弃
代表性技术:EJB, Java Plug-in, Swing,
JIT编译器: Just In Time,即时编译器
2000:JDK 1.3
1999:HotSpot虚拟机
2002:JDK 1.4
2006年,Sun开源了Java技术;遵循GPL规范;并建立了OpenJDK组织管理此些代码;
java虚拟机:JRockit, HostSpot;
编程语言的类别:指令+数据
面向过程:以指令为中心,围绕指令组织数据;
面向对象:以数据为中心,围绕数据组织指令;
Java体系结构:
java编程语言;
Java Class文件格式;java字节码,可以运行于jvm
Java API;
Java VM;
JVM的组成:
Java编程语言的特性:
面向对象、多线程、结构化错误处理
垃圾收集、动态链接、动态扩展
三个技术流派:
J2SE ==> Java 2 SE
J2EE ==> Java 2 EE
J2ME ==> Java 2 ME
JVM运行时区域:运行为多个线程
方法区:线程共享;用于存储被虚拟机加载的类信息、常量、静态变量等;永久代;
堆:Java堆是jvm所管理的内存中最大的一部分;也是GC管理的主要区域,主流的算法都基于分代收集方式进行:新生代和老年代;线程共享
Java栈:线程私有,存放线程自己的局部变量等信息;
PC寄存器(Program Counter Register),线程独占的内存空间;
本地方法栈:
JAVA 2 EE包含有的技术:
JAVA 2 SE
Servlet, JSP, EJB, JMS, JMX, JavaMail
Servlet Contaier:servlet容器
println("<h1>")
html标签要硬编码在应用程序中;
JSP技术:让java代码可以嵌入到html网页中
<html>
<body>
<h1>...</h1>
<%
%>
</body>
</html>
java web container 包含的组件有:jdk, servlet,jsp
java web container 商业实现:
WebSphere(IBM)
WebLogic (BEA --> Oracle)
Oc4j
Glassfish
Geronimo
JOnAS
JBoss
java web container 开源实现:
Tomcat
jetty
resin
jsp的解析过程:
Tomcat的核心组件包括如下3个:catalina,Coyote,Jasper
catalina: servlet container(servlet container),实现了servlet类
Coyote: http connection,接受http请求并处理响应
Jasper: JSP Engine (JSP引擎),Tomcat提供了一个Jasper编译器用以将JSP编译成对应的Servlet。
所以tomcat内置了http服务器
Tomcat的开发语言:JAVA
Tomcat Instance: 运行中的tomcat进程包含如下的组件:
Server: 即一个tomcat实例;
Service: 用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;
Engine:Tomcat的核心组件,用于运行jsp或servlet代码;
Connector:接入并解析用户请求,将请求映射为Engine中运行的代码;之后,将运行结果构建成响应报文;可以处理http, ajp等协议报文
Host:类似httpd中的虚拟主机;
Context:类似于httpd中的alias;
注意:上面的每个组件都由“类”来实现,有些组件的实现还不止一种;
顶级类组件:server
服务类组件:service
容器类组件:即可以部署webapp的组件,engine, host, context
连接器组件:connector
被嵌套类组件:valve, logger, realm
XML格式:
<server>
<service>
<connector />
<connector />
...
<engine>
<host>
<context />
<context />
...
</host>
...
</engine>
</service>
</server>
Tomcat的运行模式:
standalone:通过内置的web server (http connector)来接收客户端请求;
proxy:代理模式,由专门的web server(比如nginx)服务客户端的http请求;
in-process: 部署于同一主机;
network: 部署于不同主机;
tomcat的安装:
官方站点:http://tomcat.apache.org
部署前提:jdk:
Oracel JDK
OpenJDK
安装openjdk的步骤:
1: apt search openjdk-11-jdk 搜索软件包
2: apt install openjdk-11-jdk 安装软件包
3: 设置java的环境变量
vim /etc/profile.d/java.sh 输入如下内容:
export JAVA_HOME=/usr/lib/jvm/default-java
export PATH=$JAVA_HOME/bin:$PATH
4:重读此文件 source /etc/profile.d/java.sh
安装tomcat:
1: wget -c "http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz" 下载
tar -xvf apache-tomcat-8.5.38.tar.gz -C /usr/share/ 解压
mv /usr/share/apache-tomcat-8.5.38 /usr/share/tomcat8 重命名目录
2:设置环境变量
vim /etc/profile.d/tomcat.sh 输入如下内容
export CATALINA_HOME=/usr/share/tomcat8
export PATH=$CATALINA_HOME/bin:$PATH
3:重读此文件 source /etc/profile.d/tomcat.sh
4:catalina.sh start 即可启动tomcat,就会默认运行于8080端口(ss -tnpl 可以查看8080端口是否已经监听了)
Tomcat的目录结构:
bin: 脚本及启动时用到的类
lib: 类库
conf: 配置文件
logs: 日志文件
webapps: 应用程序默认部署目录,应用程序代码放置在此处
work:工作目录,jsp解析为servlet,jvm加载运行servlet类等
temp:临时文件目录
tomcat的配置文件有如下几种:
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:日志相关的配置信息;
tomcat目录下的bin目录保存了一些可运行文件,其中catalina.sh的用法如下:
root@kali:/usr/share/tomcat8# catalina.sh
Using CATALINA_BASE: /usr/share/tomcat8
Using CATALINA_HOME: /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME: /usr/lib/jvm/default-java
Using CLASSPATH: /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
Java WebAPP 的组织结构:
有特定的组织形式、层次型的目录结构;主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等;
/usr/local/tomcat/webapps/app1/
/: webapp的根目录;
WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml;
META-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的context.xml;
classes/: 此webapp的私有类;
lib/: 此webapp的私有类,被打包为jar格式类;
index.jsp:webapp的主页
java webapp归档格式:java web应用的格式
.war:webapp;
.jar:EJB的类;
.rar:资源适配器;
.ear:企业级应用程序;
手动添加一个测试应用程序:
1、创建webapp特有的目录结构;
mkdir -pv myapp/{lib,classes,WEB-INF,META-INF}
这里没有提供web.xml和context.xml文件,所以这个应用默认的conf目录下的配置文件web.xml和context.xml的配置信息, 局部覆盖全局。
2、提供webapp各文件;
vim myapp/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP Test Page</title>
</head>
<body>
<% out.println("Hello, world."); %>
</body>
</html>
部署(deployment)webapp相关的操作:
deploy:部署,将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp; 将其特有类通过class loader装载至tomcat;
具体有两种方式:自动和手动
自动部署:auto deploy
手动部署有如下2中方法:
1、冷部署:把webapp复制到指定位置,而后才启动tomcat;
2、热部署:在不停止tomcat的前提下进行的部署:
部署工具有:manager、ant脚本、tcd(tomcat client deployer)等;
undeploy:反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名;
stop:停止,不再向用户提供服务;
start:启动处于“停止”状态的webapp;
redeploy:重新部署;
tomcat自带的应用程序:
manager app: webapp管理工具
host manager:Virtual Hosts管理工具
要使用这些自带的应用程序必须在conf/tomcat-users.xml文件中配置用户名和密码:
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
tomcat的主配置文件server.xml结构:
<server attribute="value" attribute2="value">
<service>
<connector />
<connector />
<engine >
<host name="虚拟主机1的名称">
</host>
<host name="虚拟主机2的名称">
</host>
<host name="虚拟主机3的名称">
<context /> 这里是context1
<context /> 这里是context2
</host>
</engine>
</service>
</server>
Server: 即一个tomcat实例;
Service: 用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;
Connector:接入并解析用户请求,将请求映射为Engine中运行的代码;之后,将运行结果构建成响应报文;可以处理http, ajp等协议报文
Connector代表连接组件。Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。
Engine:Tomcat的核心组件,用于运行jsp或servlet代码;
Host元素表示一个虚拟主机,它是一个服务器的网络名称(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。
Context元素表示一个Web应用程序,它在特定的虚拟主机中运行。每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如Servlet规范述。
AJP: apache jserv protocol, 二进制协议;
在server.xml文件中自定义Host及Context示例:
<Host name="web1.magedu.com" appBase="/data/webapps/" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" reloadable="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="172\.16\.100\.100"/>
</Context>
<Context path="/shop" docBase="shopxx" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="web1_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
注意:path给定的路径不能以“/”结尾;
Context 中的path表示浏览器的访问路径,docBase表示网页程序的放置路径,docBase可以是绝对路径,docBase如果是相对路径是相对于Host标签中的appBase的
tomcat一般不会直接接受用户http请求,而是由nginx来直接接处理用户的http请求,nginx对于静态内容可以直接响应,然后自己扮演反向代理服务器将动态请求转发给tomcat处理,tomcat处理好动态请求后,将响应发送给nginx,由nginx将动态内容响应给发出该请求的用户。
流程如下:
LNMT:Linux nginx mysql tomcat
client -->http --> nginx --> reverse_proxy --> http --> tomcat (http connector)
nginx.conf配置文件:
location ~* \.(jsp|do)$ {
proxy_pass http://web1.magedu.com:8080;
}
LAMT:linux apache2 mysql tomcat
client --> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat {http connector|ajp connector}
httpd的反代模块:
主:proxy_module
子:proxy_module_http, proxy_module_ajp,分别基于http和ajp协议
httpd.conf文件的配置:
proxy_module_http:
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On 添加代理头部
ProxyRequests Off 关闭正向代理
ProxyPreserveHost On 添加用户请求头部的host到请求头部中
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://172.16.100.67:8080/
ProxyPassReverse / http://172.16.100.67:8080/
<Location />
Require all granted
</Location>
</VirtualHost>
proxy_module_ajp:
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /status ! 这表示访问/status不走代理
ProxyPass / ajp://172.16.100.67:8009/
ProxyPassReverse / ajp://172.16.100.67:8009/
<Location />
Require all granted
</Location>
</VirtualHost>
系统级:C, C++, go, erlang
应用级:C#, Java, Python, Perl, Ruby, php
语言的虚拟机:jvm, pvm,该虚拟机提供自己语言的运行时环境
动态网站:asp.net(C#), jsp(java), Django, Flask,
tips:
C语言写出来的程序,如果调用准寻POSIX规范的API,则可以达到一次编写,到处编译,也就是在各个不同的系统上编译。
动态网站:
客户端动态:applet
服务器动态:CGI,通用网关接口
webapp server: webapp服务
jsp: tomcat, jboss, jetty
php: php-fpm
Java编程语言:
SUN, James Gosling, Green Project, Oak, Java, SunWorld
1995: Java 1.0, Write Once, Run Anywhere
1996: JDK (Java Development Kit),包含一个JVM(Sun Classic VM)
JDK 1.0: JVM, Applet, AWT
1997:JDK 1.1
JAR文档格式、JDBC、JavaBeans
1998:JDK 1.2
Sun把Java技术分拆为三个方向:Java 2
J2SE: Standard Edition
J2EE:Enterprise Edition 企业版java
J2ME:Mobile Edition 已废弃
代表性技术:EJB, Java Plug-in, Swing,
JIT编译器: Just In Time,即时编译器
2000:JDK 1.3
1999:HotSpot虚拟机
2002:JDK 1.4
2006年,Sun开源了Java技术;遵循GPL规范;并建立了OpenJDK组织管理此些代码;
java虚拟机:JRockit, HostSpot;
编程语言的类别:指令+数据
面向过程:以指令为中心,围绕指令组织数据;
面向对象:以数据为中心,围绕数据组织指令;
Java体系结构:
java编程语言;
Java Class文件格式;java字节码,可以运行于jvm
Java API;
Java VM;
JVM的组成:
Java编程语言的特性:
面向对象、多线程、结构化错误处理
垃圾收集、动态链接、动态扩展
三个技术流派:
J2SE ==> Java 2 SE
J2EE ==> Java 2 EE
J2ME ==> Java 2 ME
JVM运行时区域:运行为多个线程
方法区:线程共享;用于存储被虚拟机加载的类信息、常量、静态变量等;永久代;
堆:Java堆是jvm所管理的内存中最大的一部分;也是GC管理的主要区域,主流的算法都基于分代收集方式进行:新生代和老年代;线程共享
Java栈:线程私有,存放线程自己的局部变量等信息;
PC寄存器(Program Counter Register),线程独占的内存空间;
本地方法栈:
JAVA 2 EE包含有的技术:
JAVA 2 SE
Servlet, JSP, EJB, JMS, JMX, JavaMail
Servlet Contaier:servlet容器
println("<h1>")
html标签要硬编码在应用程序中;
JSP技术:让java代码可以嵌入到html网页中
<html>
<body>
<h1>...</h1>
<%
%>
</body>
</html>
java web container 包含的组件有:jdk, servlet,jsp
java web container 商业实现:
WebSphere(IBM)
WebLogic (BEA --> Oracle)
Oc4j
Glassfish
Geronimo
JOnAS
JBoss
java web container 开源实现:
Tomcat
jetty
resin
jsp的解析过程:
Tomcat的核心组件包括如下3个:catalina,Coyote,Jasper
catalina: servlet container(servlet container),实现了servlet类
Coyote: http connection,接受http请求并处理响应
Jasper: JSP Engine (JSP引擎),Tomcat提供了一个Jasper编译器用以将JSP编译成对应的Servlet。
所以tomcat内置了http服务器
Tomcat的开发语言:JAVA
Tomcat Instance: 运行中的tomcat进程包含如下的组件:
Server: 即一个tomcat实例;
Service: 用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;
Engine:Tomcat的核心组件,用于运行jsp或servlet代码;
Connector:接入并解析用户请求,将请求映射为Engine中运行的代码;之后,将运行结果构建成响应报文;可以处理http, ajp等协议报文
Host:类似httpd中的虚拟主机;
Context:类似于httpd中的alias;
注意:上面的每个组件都由“类”来实现,有些组件的实现还不止一种;
顶级类组件:server
服务类组件:service
容器类组件:即可以部署webapp的组件,engine, host, context
连接器组件:connector
被嵌套类组件:valve, logger, realm
XML格式:
<server>
<service>
<connector />
<connector />
...
<engine>
<host>
<context />
<context />
...
</host>
...
</engine>
</service>
</server>
Tomcat的运行模式:
standalone:通过内置的web server (http connector)来接收客户端请求;
proxy:代理模式,由专门的web server(比如nginx)服务客户端的http请求;
in-process: 部署于同一主机;
network: 部署于不同主机;
tomcat的安装:
官方站点:http://tomcat.apache.org
部署前提:jdk:
Oracel JDK
OpenJDK
安装openjdk的步骤:
1: apt search openjdk-11-jdk 搜索软件包
2: apt install openjdk-11-jdk 安装软件包
3: 设置java的环境变量
vim /etc/profile.d/java.sh 输入如下内容:
export JAVA_HOME=/usr/lib/jvm/default-java
export PATH=$JAVA_HOME/bin:$PATH
4:重读此文件 source /etc/profile.d/java.sh
安装tomcat:
1: wget -c "http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz" 下载
tar -xvf apache-tomcat-8.5.38.tar.gz -C /usr/share/ 解压
mv /usr/share/apache-tomcat-8.5.38 /usr/share/tomcat8 重命名目录
2:设置环境变量
vim /etc/profile.d/tomcat.sh 输入如下内容
export CATALINA_HOME=/usr/share/tomcat8
export PATH=$CATALINA_HOME/bin:$PATH
3:重读此文件 source /etc/profile.d/tomcat.sh
4:catalina.sh start 即可启动tomcat,就会默认运行于8080端口(ss -tnpl 可以查看8080端口是否已经监听了)
Tomcat的目录结构:
bin: 脚本及启动时用到的类
lib: 类库
conf: 配置文件
logs: 日志文件
webapps: 应用程序默认部署目录,应用程序代码放置在此处
work:工作目录,jsp解析为servlet,jvm加载运行servlet类等
temp:临时文件目录
tomcat的配置文件有如下几种:
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:日志相关的配置信息;
tomcat目录下的bin目录保存了一些可运行文件,其中catalina.sh的用法如下:
root@kali:/usr/share/tomcat8# catalina.sh
Using CATALINA_BASE: /usr/share/tomcat8
Using CATALINA_HOME: /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME: /usr/lib/jvm/default-java
Using CLASSPATH: /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
Java WebAPP 的组织结构:
有特定的组织形式、层次型的目录结构;主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等;
/usr/local/tomcat/webapps/app1/
/: webapp的根目录;
WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml;
META-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的context.xml;
classes/: 此webapp的私有类;
lib/: 此webapp的私有类,被打包为jar格式类;
index.jsp:webapp的主页
java webapp归档格式:java web应用的格式
.war:webapp;
.jar:EJB的类;
.rar:资源适配器;
.ear:企业级应用程序;
手动添加一个测试应用程序:
1、创建webapp特有的目录结构;
mkdir -pv myapp/{lib,classes,WEB-INF,META-INF}
这里没有提供web.xml和context.xml文件,所以这个应用默认的conf目录下的配置文件web.xml和context.xml的配置信息, 局部覆盖全局。
2、提供webapp各文件;
vim myapp/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP Test Page</title>
</head>
<body>
<% out.println("Hello, world."); %>
</body>
</html>
部署(deployment)webapp相关的操作:
deploy:部署,将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp; 将其特有类通过class loader装载至tomcat;
具体有两种方式:自动和手动
自动部署:auto deploy
手动部署有如下2中方法:
1、冷部署:把webapp复制到指定位置,而后才启动tomcat;
2、热部署:在不停止tomcat的前提下进行的部署:
部署工具有:manager、ant脚本、tcd(tomcat client deployer)等;
undeploy:反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名;
stop:停止,不再向用户提供服务;
start:启动处于“停止”状态的webapp;
redeploy:重新部署;
tomcat自带的应用程序:
manager app: webapp管理工具
host manager:Virtual Hosts管理工具
要使用这些自带的应用程序必须在conf/tomcat-users.xml文件中配置用户名和密码:
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui"/>
tomcat的主配置文件server.xml结构:
<server attribute="value" attribute2="value">
<service>
<connector />
<connector />
<engine >
<host name="虚拟主机1的名称">
</host>
<host name="虚拟主机2的名称">
</host>
<host name="虚拟主机3的名称">
<context /> 这里是context1
<context /> 这里是context2
</host>
</engine>
</service>
</server>
Server: 即一个tomcat实例;
Service: 用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;
Connector:接入并解析用户请求,将请求映射为Engine中运行的代码;之后,将运行结果构建成响应报文;可以处理http, ajp等协议报文
Connector代表连接组件。Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。
Engine:Tomcat的核心组件,用于运行jsp或servlet代码;
Host元素表示一个虚拟主机,它是一个服务器的网络名称(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。
Context元素表示一个Web应用程序,它在特定的虚拟主机中运行。每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如Servlet规范述。
AJP: apache jserv protocol, 二进制协议;
在server.xml文件中自定义Host及Context示例:
<Host name="web1.magedu.com" appBase="/data/webapps/" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" reloadable="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="172\.16\.100\.100"/>
</Context>
<Context path="/shop" docBase="shopxx" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="web1_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
注意:path给定的路径不能以“/”结尾;
Context 中的path表示浏览器的访问路径,docBase表示网页程序的放置路径,docBase可以是绝对路径,docBase如果是相对路径是相对于Host标签中的appBase的
tomcat一般不会直接接受用户http请求,而是由nginx来直接接处理用户的http请求,nginx对于静态内容可以直接响应,然后自己扮演反向代理服务器将动态请求转发给tomcat处理,tomcat处理好动态请求后,将响应发送给nginx,由nginx将动态内容响应给发出该请求的用户。
流程如下:
LNMT:Linux nginx mysql tomcat
client -->http --> nginx --> reverse_proxy --> http --> tomcat (http connector)
nginx.conf配置文件:
location ~* \.(jsp|do)$ {
proxy_pass http://web1.magedu.com:8080;
}
LAMT:linux apache2 mysql tomcat
client --> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat {http connector|ajp connector}
httpd的反代模块:
主:proxy_module
子:proxy_module_http, proxy_module_ajp,分别基于http和ajp协议
httpd.conf文件的配置:
proxy_module_http:
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On 添加代理头部
ProxyRequests Off 关闭正向代理
ProxyPreserveHost On 添加用户请求头部的host到请求头部中
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://172.16.100.67:8080/
ProxyPassReverse / http://172.16.100.67:8080/
<Location />
Require all granted
</Location>
</VirtualHost>
proxy_module_ajp:
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /status ! 这表示访问/status不走代理
ProxyPass / ajp://172.16.100.67:8009/
ProxyPassReverse / ajp://172.16.100.67:8009/
<Location />
Require all granted
</Location>
</VirtualHost>
评论
发表评论