Nginx: Tomcat の導入と最適化 (1)

1. Tomcat の概要

1.1 Tomcat の概要

1. Tomcat はJava 言語で開発されておりTomcat サーバーは無料でオープン ソースの Web アプリケーション サーバーであり、Apache Software Foundation の Jakarta プロジェクトの中核プロジェクトになります。
2. Tomcatは軽量のアプリケーション サーバーです。中小規模のシステムや、同時アクセス ユーザーがそれほど多くない場合に広く使用されており、JSP0 プログラムの開発とデバッグには最初の選択肢です。一般に、Tomcat は Apache や Nginx などの Web サーバーと同様の HTML ページを処理する機能を持っていますが、静的HTML の処理能力が Apache や Nginx に比べてはるかに低いため、通常はTomcat が使用されます。サーブレットおよび JSP コンテナとして、リアエンド。

1.2 Tomcat コアのコンポーネント

1. Web コンテナ: Web サーバーの機能を完了します。
2. サーブレット コンテナ: 名前は catalina で、サーブレット コードを処理するために使用されます。
3. JSP コンテナ: JSP 動的 Web ページをサーブレット コードに変換するために使用されます。

  • したがって、Tomcat は Web アプリケーション サーバーであり、サーブレット/JSP コンテナでもあります。Tomcat はサーブレット コンテナとして、クライアントのリクエストを処理し、サーブレットにリクエストを送信し、サーブレットの応答をクライアントに送り返す役割を果たします。

1.2.1 サーブレットとは

  • サーブレットJava Servlet の略称であり、Java で記述されたサーバー側プログラムであるサービス コネクタとして理解され、プラットフォームやプロトコルに依存しないという特徴があります。簡単に理解すると、サーブレットはインターフェイスやメソッドを含むミドルウェアです. クライアントをデータベースに接続して、動的な Web ページの作成を実現します。

1.2.2 JSPとは

1. JSPの正式名はJava Server Pagesで、動的 Web ページ開発テクノロジです。JSP タグを使用して、HTML Web ページに Java コードを挿入します。タグは通常、<% で始まり %> で終わります。
2. JSP はJava サーブレットであり、主にJava Web アプリケーションのユーザー インターフェイス部分を実装するために使用されます。
3. JSP は Web フォームを通じてユーザー入力データを取得し、データベースやその他のデータ ソースにアクセスして、Web ページを動的に作成します

1.3 Tomcat の機能コンポーネントの構造

  • 负责接收和反馈外部请求的连接器 ConnectorTomcat には、とという 2 つのコア関数があります负责处理请求的容器 Containerこのうち、コネクタとコンテナは相互に補完し合い、Web サービスの基本的なサービスを構成します。各 Tomcat サーバーは複数のサービスを管理できます。

1. コネクタ: 外部リクエストの受信と応答を担当します。これは Tomcat と外部世界との間の通信ハブであり、リスニング ポートは外部リクエストを受信し、そのリクエストを処理してビジネス処理のためにコンテナに渡し、最後にコンテナの処理結果で外部に応答します。
2. コンテナ: ビジネス ロジックの内部処理を担当します。その内部は、エンジン、ホスト、コンテキスト、ラッパーの 4 つのコンテナで構成されており、サーブレット関連のロジックの管理と呼び出しに使用されます。
3.サービス:外部から提供されるWebサービス。これには主に、コネクタとコンテナの 2 つのコア コンポーネントと、その他の機能コンポーネントが含まれています。Tomcat は複数のサービスを管理でき、各サービスは互いに独立しています。

1.3.1 コンテナの構造解析

  • 各サービスにはコンテナー コンテナーが含まれます。コンテナ内には 4 つのサブコンテナがあります。

  • 4 つのサブコンテナの機能は次のとおりです:
    1. エンジン: 複数の仮想ホストの管理に使用されるエンジン。サービスには最大でも 1 つのエンジンしか持てません;
    2. ホスト: 仮想ホストを表し、サイトとも呼ばれます。ホスト追加サイトによって構成できます;
    3. コンテキスト: 複数のサーブレット ラッパーを含む Web アプリケーションを表します;
    4. ラッパー: ラッパー、コンテナーの最下位層。各 Wrapper は、オブジェクト インスタンスの作成、実行、および破棄を担当するサーブレットをカプセル化します。

  • Engine、Host、Context、Wrapper、これら 4 つのコンテナは親子関係に属します。

  • コンテナは 1 つのエンジンで複数の仮想ホストを管理できます。各仮想ホストは複数の Web アプリケーションを管理できます。各 Web アプリケーションには複数のサーブレット ラッパーがあります。

1.4 Tomcatリクエストプロセス

1. ユーザーがブラウザに URL を入力すると、リクエストはマシンのポート 8080 に送信され、そこでリッスンしているコネクタによって取得されます; 2. コネクタは、処理のためにリクエストをサービスのエンジン (コンテナ) に渡し
ますリクエストはエンジン
、ホスト、コンテキスト、ラッパーの 4 つのコンテナ間でレイヤーごとに呼び出され、最終的にサーブレット内の対応するビジネス ロジックとデータ ストレージを実行します。
4. 実行後、リクエストの応答は、Context、Host、および Engine コンテナの間でレイヤーごとに返され、最終的に Connector に返され、Connector を介してクライアントに返されます。

2. 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
  • ちょっとした知識
    1. JDK: Java 開発キット (Java 開発ツール)
    2. JRE: Java ランタイム環境 (Java ランタイム環境)
    3. JVM: Java virtuak マシン (Java 仮想マシン)、Java プログラムを複数のプラットフォームで実行できるようにするためのクラス ファイル。
    4. CLASSPATH: JVM がクラス ファイルをロードできるように、使用または実行するクラスを配置する場所を jvm に指示します。
    5. tools.jar: システムがクラスをコンパイルするために使用される場合、つまり javac が実行される場合に使用されます。
    6. dt.jar: dt.jar は、主にスイング パッケージなどの動作環境に関するクラス ライブラリです。
#验证一下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

ここに画像の説明を挿入

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

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

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

ここに画像の説明を挿入

  • メインディレクトリの説明
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. Tomcat 仮想ホストの構成

  • 多くの場合、会社では実行する必要がある複数のプロジェクトがあるため、システム リソースを大量に消費するため、複数の Tomcat サービスを 1 台のサーバーで実行することは一般的にはありません。この時点で、Tomcat 仮想ホストを使用する必要があります。
    例: 次に、2 つのドメイン名 www.kgc.com と www.benet.com を追加し、これら 2 つのドメイン名を通じて異なるプロジェクト コンテンツにアクセスしたいと考えます。
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\!


ここに画像の説明を挿入

  • 設定ファイルの説明
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
  • HTTP 要求プロセス
    1. コネクターがリッスンするポートは 8080 です。要求されたポートがリスニング ポートと一致するため、コネクタは要求を受け入れます。
    2. エンジンのデフォルトの仮想ホストは www.kgc.com で、仮想ホストのディレクトリは webapps であるためです。したがって、リクエストは tomcat/webapps ディレクトリを見つけます。
    3. アクセスパスはルートパスで、URI は空です。つまり、空は Web プログラムのアプリケーション名、つまりコンテキストです。このとき、リクエストは /usr/local/tomcat/webapps/kgc ディレクトリを見つけて、index.jsp を解析して返します。

4. 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

ここに画像の説明を挿入

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/2301_76875445/article/details/131047449