Tomcat的多實例和動靜分離

目錄

一、多實例

二、?nginx+tomcat的負載均衡和動靜分離

三、Tomcat 客戶端->四層代理->七層代理->tomcat服務器

實驗:

問題總結:


tomcat日志文件:/usr/local/tomcat/logs/catalina.out

一、多實例

在一臺服務器上有多個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/tomcat23.配置 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/tomcat2source /etc/profile.d/tomcat.sh4.修改 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端口,負責和其他的HTTP服務器建立連接。
在把Tomcat與其他HTTP服務器集成時,需要用到這個連接器。第三個連接器
port="8010":指定AJP連接器監聽的端口號。在這個示例中,AJP連接器監聽在8010端口上。protocol="AJP/1.3":指定連接器所使用的協議。這里設置為AJP/1.3,表示使用AJP協議的版本1.3。redirectPort="8443":指定重定向端口。當AJP連接器接收到HTTP請求時,如果請求是通過HTTPS(加密)訪問的,
則會將請求重定向到8443端口。AJP連接器用于將靜態資源和動態請求從前端Web服務器(如Apache HTTP Server)轉發到Tomcat服務器。
這樣可以將Tomcat服務器隱藏在防火墻之后,提高安全性,同時提供更高的性能,特別是在處理動態請求時。
常見的AJP連接器配置是為了將Tomcat與Apache HTTP Server或Nginx等前端服務器集成,以實現負載均衡、反向代理等功能
----------------------------------------------------------------------------------------------------------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_HOME1vim /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_HOME1vim /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_HOME2vim /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_HOME26.啟動各 tomcat 中的 /bin/startup.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh netstat -natp | grep java7.瀏覽器訪問測試
http://192.168.233.21:8080
http://192.168.233.21:8081

二、?nginx+tomcat的負載均衡和動靜分離

靜:靜態頁面

動:動態頁面

分別可以對靜態頁面和動態頁面發起不同的請求,會有不同的響應結果

nginx:反向代理-----負載均衡-------tomcat是后端服務器------web靜態由nginx來做-------靜態請求到nginx-----動態頁面到tomcat

tomcat并發量能力弱, 只有nginx的六分之一,所以要有負載均衡進行合理的調用分配。

nginx:請求靜態頁面她可以直接響應用戶的靜態請求,動態請求,通過nginx服務器轉發到后端的tomcat進行處理。同時,設置動態請求的負載均衡。

結構圖:

1、備份nginx配置文件

cd /usr/local/nginx/conf

cp nginx.conf nginx.conf.bak.20230811

2、編輯nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

#添加以下內容

?upstream ky30 {????????

????server 192.168.11.14:8080 weight=1;?#多實例,不同端口

????server 192.168.11.14:8081 weight=1;?#多實例,不同端口

????server 192.168.11.15:8080 weight=2;?#單臺

}

編輯html文件:

cd /usr/local/nginx/html

vim index.htm

#復制以下內容

<html>

<body>

<h1> this is Nginx static test !</h2>

<img src="gundam.jpg"/>

</body>

</html>

?

3、進入tomcat多實例主機

cd /usr/local/tomcat/tomcat1/webapps

Mkdir test

Cd test

Vim index.jsp

#復制粘貼以下內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test1 page</title>

</head>

<body>

<% out.println("動態頁面 1,http://www.test1.com");%>

</body>

</html>

cd /usr/local/tomcat/tomcat2/webapps

Mkdir test

Cd test

Vim index.jsp

#復制粘貼以下內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test2?page</title>

</head>

<body>

<% out.println("動態頁面 2,http://www.test2.com");%>

</body>

</html>

4、編輯tomcat多實例主機的server.xml

vim /usr/local/tomcat/tomcat1/conf/server.xml

#刪除前面的host配置

#復制粘貼以下內容,注意<Host>標記!!!

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />

</Host>

vim /usr/local/tomcat/tomcat2/conf/server.xml

#刪除前面的host配置

#復制粘貼以下內容,注意<Host>標記!!!

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />

</Host>

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

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

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

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

5、編輯單臺tomcat的jsp文件

cd /usr/local/tomcat/webapps

Mkdir test

Cd test

Vim index.jsp

#復制粘貼以下內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test3?page</title>

</head>

<body>

<% out.println("動態頁面 3,http://www.test3.com");%>

</body>

</html>

6、編輯單臺tomcat的server.xml文件

vim /usr/local/tomcat/conf/server.xml

#刪除前面的host配置

#復制粘貼以下內容,注意<Host>標記!!!

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />

</Host>

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

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

三、Tomcat 客戶端->四層代理->七層代理->tomcat服務器

實驗:

四層代理:

?

?七層代理1:

?

?七層代理2:

?

編輯Tomcat服務器配置:

Tomcat多實例服務器:

cd /usr/local/tomcat/tomcat1/webapps

Mkdir test

Cd test

Vim index.jsp

#復制粘貼以下內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test1 page</title>

</head>

<body>

<% out.println("動態頁面 1,http://www.test1.com");%>

</body>

</html>

cd /usr/local/tomcat/tomcat2/webapps

Mkdir test

Cd test

Vim index.jsp

#復制粘貼以下內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test2?page</title>

</head>

<body>

<% out.println("動態頁面 2,http://www.test2.com");%>

</body>

</html>

編輯tomcat多實例主機的server.xml

vim /usr/local/tomcat/tomcat1/conf/server.xml

#刪除前面的host配置

#復制粘貼以下內容,注意<Host>標記!!!

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />

</Host>

vim /usr/local/tomcat/tomcat2/conf/server.xml

#刪除前面的host配置

#復制粘貼以下內容,注意<Host>標記!!!

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />

</Host>

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

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

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

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

編輯單臺tomcat的jsp文件

cd /usr/local/tomcat/webapps

Mkdir test

Cd test

Vim index.jsp

#復制粘貼以下內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test3?page</title>

</head>

<body>

<% out.println("動態頁面 3,http://www.test3.com");%>

</body>

</html>

編輯單臺tomcat的server.xml文件

vim /usr/local/tomcat/conf/server.xml

#刪除前面的host配置

#復制粘貼以下內容,注意<Host>標記!!!

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />

</Host>

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

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

測試:

192.168.11.12:82

192.168.11.12:82/index.jsp

問題總結:

1、如果配置完成后,測試訪問頁面,發現進入weclome to cent0s7頁面,就代表,進入了使用yum安裝的nginx配置的頁面(/usr/share/nginx/html)

出現此情況表示:進入了yum安裝的nginx配置的頁面了,和自己安裝的nginx沖突,可以systemctl stop nginx后,進入自己配置的nginx文件中,輸入指令:nginx ?,可以開啟單一的配置文件中的nginx服務,而不會像systemctl restart nginx 那樣,打開所有nginx。

或者刪除nginx服務,然后重新編譯安裝。(慎重)

2、出現此狀況:

?可能是你的配置文件輸入有錯誤,寫完后一定要輸入:nginx -t ?,查看配置文件中拼寫是否有錯誤。

3、如果發現比如端口80被占用的情況

Netstat -antp | grep 80

#查看端口情況

此時,有兩種解決辦法:

1、kill -9 xxx 殺死占用端口的進程

2、更改配置文件中的端口號,避免出現重復使用端口號導致的端口被占用的情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37161.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37161.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序(原生)和uniapp預覽電子文件doc/pdf/ppt/excel等

微信小程序原生預覽文件 function previewFile(value) {const fileExtName ${value.ext};const randFile new Date().getTime() fileExtName;uni.showLoading({title: 加載中...})wx.downloadFile({url: value.url, // 文件的本身urlfilePath: wx.env.USER_DATA_PATH / r…

ES使用心得

客戶端 Transport Client已經快要廢棄了&#xff0c;官方推薦使用High Level REST Client。 常用命令 啟停 systemctl start elasticsearch systemctl stop elasticsearch節點狀態 curl http://myservice1:9200/_cat/nodes?vip heap.percent ram.percent cpu l…

解壓版 MySQL 數據庫的安裝與配置

目錄 1 下載2 安裝3 配置3.1 添加環境變量3.2 新建配置文件3.3 初始化MySQL3.4 注冊MySQL服務3.5 啟動MySQL服務3.6 修改默認賬戶密碼 4 登錄5 卸載 安裝環境:Win10 64位 軟件版本:MySQL 5.7.24 解壓版 1 下載 點擊鏈接 進入如下界面 ??注意&#xff1a; 我們一般不會選擇最新…

防火墻筆記

什么是防火墻 在計算機網絡中是指設置在可信任的內部網絡和不可信任的外部網絡之間的屏障&#xff0c;通過強化邊界控制保障內容安全&#xff0c;同時不妨礙內部對外部的訪問。 20世紀80年代&#xff0c;最早的防火墻幾乎與路由器同時出現&#xff0c;第一代防火墻主要基于包過…

RocketMQ 5.1.0 源碼詳解 | Producer 發送流程

文章目錄 初始化DefaultMQProducer實例發送流程DefaultMQProducer#sendDefaultMQProducerImpl#sendMQClientInstance#updateTopicRouteInfoFromNameServer使用特定 topic 獲取路由信息使用默認 topic 獲取路由信息 DefaultMQProducerImpl#sendDefaultImpl發送流程總結 初始化De…

記一次練習(內容待完善)

記錄最近一次爬蟲和數據可視化練習 0、數據獲取 import pandas as pdyear [2018,2019,2020,2021,2022] header {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile S…

31 | 獨角獸企業數據分析

獨角獸企業:是投資行業尤其是風險投資業的術語,一般指成立時間不超過10年、估值超過10億美元的未上市創業公司。 項目目的: 1.通過對獨角獸企業進行全面地分析(地域,投資方,年份,行業等),便于做商業上的戰略決策 項目數據源介紹 1.數據源:本項目采用的數據源是近…

2023年大廠前端面試題匯總

一、58同城前端面試題27道 1. css盒模型 2. css畫三角形 3. 盒子水平垂直居中&#xff08;所有方式&#xff09; 4. 重繪、重排 重繪就是重新繪制&#xff08;repaint&#xff09;&#xff1a;是在一個元素的外觀被改變所觸發的瀏覽器行為&#xff0c;瀏覽器會根據元素的新屬性…

文檔控件DevExpress Office File API v23.1新版亮點 - 支持.NET MAUI

DevExpress Office File API是一個專為C#, VB.NET 和 ASP.NET等開發人員提供的非可視化.NET庫。有了這個庫&#xff0c;不用安裝Microsoft Office&#xff0c;就可以完全自動處理Excel、Word等文檔。開發人員使用一個非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

Spring Security自定義登陸界面和密碼驗證邏輯

maven依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> 創建配置文件處理跳轉攔截等功能以及密碼比對功能 package com.example.demo2.demos.web1;…

Shell 變量

Shell 變量 定義變量時&#xff0c;變量名不加美元符號&#xff08;$&#xff0c;PHP語言中變量需要&#xff09;&#xff0c;如&#xff1a; your_name"runoob.com" 注意&#xff0c;變量名和等號之間不能有空格&#xff0c;這可能和你熟悉的所有編程語言都不一樣…

python如何實現1ms內觸發兩個接口請求

在Python中&#xff0c;可以通過多線程或者協程來實現1ms內觸發兩個接口請求。以下是兩種方法的示例代碼&#xff1a; 1.多線程實現&#xff1a; import threading import requestsdef send_request(url):response requests.get(url)print(response.text)# 創建兩個線程&…

nginx一般輪詢、加權輪詢、ip_hash等負載均衡模式配置介紹

一.負載均衡含義簡介 二.nginx負載均衡配置方式 準備三臺設備&#xff1a; 2.190均衡服務器&#xff0c;2.191web服務器1&#xff0c;2.160web服務器2&#xff0c;三臺設備均安裝nginx&#xff0c;兩臺web服務器均有網頁內容 1.一般輪詢負載均衡 &#xff08;1&#xff09…

ARTS 挑戰打卡的第9天 --- 如何知道一個數是否為2的若干次冪(Algorithm)

前言 &#xff08;1&#xff09;今天看到一個有意思的問題&#xff0c;如何判斷一個數字是否為2的若干次冪。這個問題并不難&#xff0c;但是對于我們的C語言功底還是有一點點的考驗的。 &#xff08;2&#xff09;希望各位可以先自行思考&#xff0c;實在想不出來再看后面的講…

【es6】具名組匹配

1、組匹配 正則表達式使用圓括號進行組匹配&#xff0c;如&#xff1a;const RE_DATE /(\d{4})-(\d{2})-(\d{2})/;,三個圓括號形成了三個組匹配。 代碼&#xff1a; const RE_DATE /(\d{4})-(\d{2})-(\d{2})/;const matchObj RE_DATE.exec(1999-12-31); const year matchO…

rabbitmq的消息應答

消費者完成一個任務可能需要一段時間&#xff0c;如果其中一個消費者處理一個長的任務并僅只完成 了部分突然它掛掉了&#xff0c;會發生什么情況。RabbitMQ 一旦向消費者傳遞了一條消息&#xff0c;便立即將該消 息標記為刪除。在這種情況下&#xff0c;突然有個消費者掛掉了…

數據分析兩件套ClickHouse+Metabase(一)

ClickHouse篇 安裝ClickHouse ClickHouse有中文文檔, 安裝簡單 -> 文檔 官方提供了四種包的安裝方式, deb/rpm/tgz/docker, 自行選擇適合自己操作系統的安裝方式 這里我們選deb的方式, 其他方式看文檔 sudo apt-get install -y apt-transport-https ca-certificates dirm…

魔改 axuanup 的 aardio和python 猜拳游戲 代碼

根據 axuanup 的 aardio和python 猜拳游戲 代碼&#xff0c;魔改了一個風格不一樣的代碼。 爭取做到代碼盡量“簡”&#xff0c;但還沒到“變態簡”的程度&#xff0c;因為還能看懂。 原文&#xff1a;aardio和python 猜拳游戲-自由交流樂園-Aardio資源網 代碼如下&#xff…

【Flutter】【基礎】CustomPaint 繪畫功能(一)

功能&#xff1a;CustomPaint 相當于在一個畫布上面畫畫&#xff0c;可以自己繪制不同的顏色形狀等 在各種widget 或者是插件不能滿足到需求的時候&#xff0c;可以自己定義一些形狀 使用實例和代碼&#xff1a; CustomPaint&#xff1a; 能使你繪制的東西顯示在你的ui 上面&a…