Nginx: implementación y optimización de Tomcat (1)

1. Introducción a Tomcat

1.1 Introducción a Tomcat

1. Tomcat está desarrollado en lenguaje Java . El servidor Tomcat es un servidor de aplicaciones web gratuito y de código abierto . Es un proyecto central en el proyecto Jakarta de Apache Software Foundation. Conviértete.
2. Tomcat es un servidor de aplicaciones liviano . Es ampliamente utilizado en sistemas pequeños y medianos y en ocasiones donde no hay muchos usuarios con acceso simultáneo. Es la primera opción para desarrollar y depurar programas JSP0. En términos generales, aunque Tomcat tiene la misma función de procesamiento de páginas HTML que servidores web como Apache o Nginx , pero debido a que su capacidad para procesar HTML estático es mucho menor que la de Apache o Nginx, Tomcat generalmente se ejecuta como un contenedor Servlet y JSP. por separado en la parte trasera.

1.2 Componentes del núcleo de Tomcat

1. Contenedor web: completa la función del servidor web.
2. Contenedor de Servlet: el nombre es catalina, que se utiliza para procesar el código de Servlet.
3. Contenedor JSP: se utiliza para traducir páginas web dinámicas JSP en códigos Servlet.

  • Entonces, Tomcat es un servidor de aplicaciones web y también un contenedor Servlet/JSP. Como contenedor de servlets, Tomcat es responsable de procesar las solicitudes de los clientes, enviar solicitudes a los servlets y enviar las respuestas de los servlets a los clientes.

1.2.1 ¿Qué es un servlet?

  • Servlet es la abreviatura de Java Servlet . Puede entenderse como un conector de servicio , un programa del lado del servidor escrito en Java, y tiene las características de ser independiente de plataformas y protocolos. Entendimiento simple: servlet es un middleware, que incluye interfaces y métodos. Conectar el cliente a la base de datos para realizar la creación de páginas web dinámicas.

1.2.2 ¿Qué es JSP?

1. El nombre completo de JSP es Java Server Pages , que es una tecnología de desarrollo de páginas web dinámicas . Utiliza etiquetas JSP para insertar código Java en páginas web HTML. Las etiquetas generalmente comienzan con <% y terminan con %>.
2. JSP es un servlet de Java , que se utiliza principalmente para implementar la parte de la interfaz de usuario de las aplicaciones web de Java .
3. JSP obtiene datos de entrada del usuario a través de formularios web, accede a bases de datos y otras fuentes de datos y luego crea dinámicamente páginas web .

1.3 Estructura del componente funcional de Tomcat

  • Hay dos funciones principales de Tomcat, a saber 负责接收和反馈外部请求的连接器 Connector, y 负责处理请求的容器 Container. Entre ellos, el conector y el contenedor se complementan y juntos constituyen el Servicio web básico. Cada servidor Tomcat puede administrar múltiples servicios.

1. Conector: Responsable de recibir y responder solicitudes externas. Es el centro de comunicación entre Tomcat y el mundo exterior. El puerto de escucha recibe solicitudes externas, procesa las solicitudes y las pasa al contenedor para el procesamiento comercial y, finalmente, responde al mundo exterior con los resultados procesados ​​del contenedor.
2. Contenedor: Responsable del procesamiento interno de la lógica de negocios. Su interior consta de cuatro contenedores, Engine, Host, Context y Wrapper, que se utilizan para administrar e invocar la lógica relacionada con Servlet.
3. Servicio: Servicio web proporcionado externamente. Incluye principalmente dos componentes principales, Conector y Contenedor, y otros componentes funcionales. Tomcat puede administrar múltiples servicios y cada servicio es independiente entre sí.

1.3.1 Análisis de la estructura del contenedor

  • Cada Servicio contendrá un contenedor Contenedor. Hay 4 subcontenedores dentro del Contenedor.

  • Las funciones de los cuatro subcontenedores son:
    1. Motor: Motor, que se utiliza para administrar múltiples hosts virtuales. Un Servicio solo puede tener un Motor como máximo;
    2. Host: Representa un host virtual, que también puede denominarse sitio, y se puede configurar mediante el sitio Host Add
    3. Contexto: representa una aplicación web, incluidos varios envoltorios de Servlet
    4. Envoltorio: envoltorio, la capa inferior del contenedor. Cada Wrapper encapsula un Servlet, que es responsable de la creación, ejecución y destrucción de instancias de objetos.

  • Engine, Host, Context y Wrapper, estos cuatro contenedores pertenecen a la relación padre-hijo.

  • Un contenedor puede administrar múltiples hosts virtuales por un motor. Cada host virtual puede administrar múltiples aplicaciones web. Cada aplicación web tendrá múltiples contenedores de servlet.

1.4 Proceso de solicitud de Tomcat

1. El usuario ingresa la URL en el navegador, y la solicitud se envía al puerto 8080 de la máquina, y el Conector la obtiene escuchando allí 2. El Conector entrega la solicitud
al Motor (Contenedor) de su Servicio para su procesamiento , y espera el Engine 3. La
solicitud se invoca capa por capa entre los cuatro contenedores de Engine, Host, Context y Wrapper, y finalmente ejecuta la lógica de negocios correspondiente y el almacenamiento de datos en el Servlet.
4. Después de la ejecución, la respuesta de la solicitud se devuelve capa por capa entre los contenedores Contexto, Host y Motor, y finalmente se devuelve al Conector y al cliente a través del Conector.

2. Implementación del servicio Tomcat

#在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.安装JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm 
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

3.设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile.d/java.sh
java -version
  • Pequeño conocimiento
    1. JDK: kit de desarrollo de Java (herramienta de desarrollo de Java)
    2. JRE: entorno de tiempo de ejecución de Java (entorno de tiempo de ejecución de Java)
    3. JVM: máquina virtual de Java (máquina virtual de Java), para que los programas de Java puedan ejecutarse en múltiples plataformas archivo de clase .
    4. CLASSPATH: Dígale a jvm dónde colocar la clase que se usará o ejecutará, para que JVM pueda cargar el archivo de clase.
    5. tools.jar: Se usa cuando se usa el sistema para compilar una clase, es decir, se usa cuando se ejecuta javac.
    6. dt.jar: dt.jar es una biblioteca de clases sobre el entorno operativo, principalmente el paquete swing.
#验证一下JDK运行环境安装是否OK
首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。

vim Hello.java
#类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
public class Hello {			
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

javac Hello.java
java Hello

inserte la descripción de la imagen aquí

4.安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start	
	
#前台启动
/usr/local/tomcat/bin/catalina.sh run		

netstat -natp | grep 8080

vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]WantedBy=multi-user.target

浏览器访问Tomcat的默认主页 http://192.168.119.3:8080

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

5.优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh

inserte la descripción de la imagen aquí

  • Descripción del directorio principal
ll /usr/local/tomcat/
●bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh 
●conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml 
●lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
●logs:存放 Tomcat 执行时的日志
●temp:存放 Tomcat 运行时产生的文件
●webapps:存放 Tomcat 默认的 Web 应用项目资源的目录
●work:Tomcat 的工作目录,存放 Web 应用代码生成和编译文件

3. Configuración del servidor virtual de Tomcat

  • En muchos casos, la empresa tendrá varios proyectos que deben ejecutarse. Por lo general, varios servicios de Tomcat no se ejecutarán en un servidor, lo que consumirá demasiados recursos del sistema. En este punto, debe utilizar el host virtual de Tomcat.
    Por ejemplo: ahora agregue dos nombres de dominio www.kgc.com y www.benet.com, con la esperanza de acceder a diferentes contenidos del proyecto a través de estos dos nombres de dominio.
1.创建 kgc 和 benet 项目目录和文件
mkdir /usr/local/tomcat/webapps/kgc
mkdir /usr/local/tomcat/webapps/benet
echo "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp

2.修改 Tomcat 主配置文件 server.xml
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

3.客户端浏览器访问验证
echo "192.168.119.3 www.kgc.com www.benet.com" >> /etc/hosts

浏览器访问 http://www.kgc.com:8080/   页面显示This is kgc page\! 
浏览器访问 http://www.benet.com:8080/   页面显示This is benet page\!


inserte la descripción de la imagen aquí

  • Descripción del archivo de configuración
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验

Context
docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
  • Proceso de solicitud HTTP
    1. El puerto que escucha el conector es 8080. Dado que el puerto solicitado coincide con el puerto de escucha, el conector acepta la solicitud.
    2. Porque el servidor virtual predeterminado del motor es www.kgc.com, y el directorio del servidor virtual es webapps. Entonces, la solicitud encuentra el directorio tomcat/webapps.
    3. La ruta de acceso es la ruta raíz y el URI está vacío, es decir, el vacío es el nombre de la aplicación del programa web, es decir, el contexto. En este momento, la solicitud encuentra el directorio /usr/local/tomcat/webapps/kgc, analiza index.jsp y lo devuelve.

4. Implementación de varias instancias de Tomcat

1.安装好 jdk
2.安装 tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

3.配置 tomcat 环境变量
vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2


source /etc/profile.d/tomcat.sh

4.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">		#22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1"		#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。 第二个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。

5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

6.启动各 tomcat 中的 /bin/startup.sh 
#防止失误可以先停止服务再启动
/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

netstat -natp | grep java

7.浏览器访问测试
http://192.168.119.4.0:8080
http://192.168.119.4:8081

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/2301_76875445/article/details/131047449
Recomendado
Clasificación