目錄
#1.1案例概述
? 1.1.1案例前置知識點
? 1.1.2案例環境
#2.1案例實施
? 2.1.1實施準備
? 2.1.2查看JDK是否安裝
? 2.1.3安裝配置Tomcat
? 2.1.4Tomcat主配置文件說明
? 2.1.5建立Java的Web站點
#3.1Nginx+Tomcat負載均衡,動靜分離群集的實驗案例
? 3.1.1案例概述
? 3.1.2案例環境
? 3.1.3案例實施
? 3.1.4Nginx服務器配置
? 3.1.5測試效果
1.1案例概述
? ?目前,IBM 的 WebSphere 及 Oracle 的 WebLogic 占據了市面上 Java 語言 Web 站點的大部分份額。這兩種軟件以其無與倫比的性能及可靠性等優勢被廣泛應用于大型互聯網公司的 Web 場景中,但是其高昂的價格也使得小型互聯網公司對此望而卻步。
? ?Tomcat 自 5.x 版本以來,其性能上已經得到了大幅的提升,再加上其開放性的框架和可二次開發等特性,已經完全可以用在訪問量不是很大的生產環境下。目前,大多數用于 JSP 技術開發的電子商務網站基本應用了 Tomcat,而且 Tomcat 的 Servlet 和 JSP 這兩種 API 也完全可以適用于 V3 版移聯建站管理系統。
1.1.1案例前置知識點
(1)Tomcat 簡介
? ? ?名稱由來:Tomcat 最初是由 Sun 的軟件構架師詹姆斯?鄧肯?戴維森開發的。后來他幫助將其變為開源項目,并由 Sun 貢獻給 Apache 軟件基金會。由于大部分開源項目 O’Reilly 都會出一本相關的書,并且將其封面設計成某個動物的素描,因此他希望將此項目以一個動物的名字命名,因為他希望這種動物能夠自己照顧自己,最終,他將其命名為 Tomcat(公貓)。而 O’Reilly 出版的介紹 Tomcat 的書籍的封面也被設計成了一個公貓的形象。而 Tomcat 的 Logo 兼吉祥物也被設計成了一只公貓。
? ? 其實 Tomcat 在開始研發的時候并不叫這個名字,早期 Tomcat 項目的名字叫 Catalina,所以當我們安裝完 Tomcat 后會發現安裝路徑下面有很多和 Catalina 有關的目錄和文件,而這些文件通常也是我們使用或者配置 Tomcat 的重要文件。
(2)應用場景
? ? Tomcat 服務器是一個免費的開放源代碼的 Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試 JSP 程序的首選。一般來說,Tomcat 雖然和 Apache 或者 Nginx 這些 Web 服務器一樣,具有處理 HTML 頁面的功能,然而由于其處理靜態 HTML 的能力遠不及 Apache 或者 Nginx,所以 Tomcat 通常是作為一個 Servlet 和 JSP 容器,單獨運行在后端,如圖 5.1 所示。
1.1.2案例環境
主機 | IP 地址 | 操作系統 | 應用 |
---|---|---|---|
Tomcat 服務器 | OpenEuler24 | 192.168.10.101 | apache-tomcat-9.0.8 |
2.1案例實施
2.1.1實施準備
(1)關閉防火墻
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
?(2)在安裝Tomcat之前必須安裝JDK
? ? ?JDK 的全稱是 Java Development Kit,是 Sun 公司免費提供的 Java 語言的軟件開發工具包,其中包含 Java 虛擬機(JVM)。編寫好的 Java 源程序經過編譯可形成 Java 字節碼,只要安裝了 JDK,就可以利用 JVM 解釋這些字節碼文件,從而保證了 Java 的跨平臺性。
? ? ?在平臺兼容性方面,JDK 作為解釋字節碼文件并據此調用操作系統 API 實現對應功 Java 虛擬機,與操作系統類型和平臺位數密切相關,因此存在不同類型的版本,而 Tomcat 也具有上述特征,默認情況下 JDK 已經安裝,所以需要預先下載 Tomcat,本章中所使用的 Tomcat 軟件的源碼包為 apache-tomcat-9.0.8.tar.gz。
2.1.2查看JDK是否安裝
[root@localhost tomcat9]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
2.1.3安裝配置Tomcat
(1)Tomcat的安裝和配置
[root@localhost ~]# tar xf apache-tomcat-9.0.8.tar.gz
(2)解壓并移動到/usr/local下
[root@localhost ~]# mv apache-tomcat-9.0.8/ /usr/local/tomcat9
(3)啟動tomcat
[root@localhost tomcat9]# /usr/local/tomcat9/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
Tomcat默認運行在8080端口
[root@localhost ~]# netstat -anpt | grep 8080
tcp6 0 0 ::8080 :::* LISTEN 2809/java
(4)打開瀏覽器驗證
2.1.4Tomcat主配置文件說明
xml
<?xml version="1.0" encoding="UTF-8"?>
...... //省略部分內容
<Server port="8005" shutdown="SHUTDOWN">
// Tomcat 關閉端口,默認只對本機地址開放,可以在本機通過 telnet 127.0.0.1 8005
訪問
// 對 Tomcat 進行關閉操作
...... //省略部分內容
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
//Tomcat 啟動的默認端口號 8080,可以根據需要進行更改...... //省略部分內容<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
//Tomcat 啟動 AJP 1.3 連接器時默認的端口號,可以根據需要進行更改
...... //省略部分內容
//以下為 Tomcat 定義虛擬主機時的配置及日志配置
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" /> -->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory =
"logs"prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t " ;%r" ; %s %b" /></Host>
</Engine>
</Service>
</Server>
?2.1.5建立Java的Web站點
(1)在根目錄下建立一個web目錄,并在里面建立一個webapp1目錄,用于存放網站文件。
[root@localhost ~]# mkdir -pv /web/webapp1
mkdir: created directory "/web"
mkdir: created directory "/web/webapp1"
?(2)在webapp1目錄下建立一個index.jsp的測試頁面。
[root@localhost ~]# vim /web/webapp1/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>
<body>
<div>靜態頁面的圖片 1</div><br><img src="logo.jpg">
</body></html>
?(3)修改Tomcat的server.xml文件。
plaintext
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
......省略部分內容
<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- SingleSignOn valve, share authentication between web applicationsDocumentation at: /docs/config/valve.html --><!--<Valve className="org.apache.catalina.authenticator.SingleSignOn" />--><!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><Context docBase="/web/webapp1" path="" reloadable="false" ></Context>
</Host>
//docBase: web 應用的文檔基準目錄
//reloadable: 設置監視"類"是否變化
//path="" 設置默認"類"......省略部分內容
(4)關閉Tomcat,再重新啟動。
[root@localhost ~]# /usr/local/tomcat9/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat9/bin/startup.sh
?(5)確認Web站點
3.1Nginx+Tomcat負載均衡,動靜分離群集的實驗案例
3.1.1案例概述
? ?通常情況下,一臺 Tomcat 站點由于可能出現單點故障及無法應付過多客戶復雜多樣的請求等問題,不能單獨應用于生產環境下,所以需要一套更可靠的解決方案來完善 Web 站點架構。
? ?Nginx 是一款非常優秀的 http 服務器軟件,它能夠支持高達 50000 個并發連接數的響應,擁有強大的靜態資源處理能力,運行穩定,并且內存、CPU 等系統資源消耗非常低。目前很多大型網站都應用 Nginx 服務器作為后端網站程序的反向代理及負載均衡器,來提升整個站點的負載并發能力。
? ?Nginx 是一個非常強大的靜態 web 服務,Tomcat 處理動態請求效率不高,而一般網站大多數的內容都是靜態文件(如圖片、html、css、js 等),經過 Nginx 前端的反向代理加速和過濾,后端 Tomcat 處理請求的壓力便可大大減少,只需負責處理動態內容就可以了。在性能與穩定性的權衡下,使用 Nginx+Tomcat 搭配便可讓它們在各自擅長的領域大展拳腳。
? ? 本案例介紹以 Nginx 作為負載均衡器、靜態頁面處理,Tomcat 作為應用服務器的負載群集、動態頁面處理的設置方法。網站拓撲架構如圖 5.4 所示。
3.1.2案例環境
主機 | IP 地址 | 操作系統 | 應用 |
---|---|---|---|
Tomcat1 服務器 | OpenEuler24 | 192.168.10.101 | apache-tomcat-9.0.8 |
Tomcat2 服務器 | OpenEuler24 | 192.168.10.102 | apache-tomcat-9.0.8 |
Nginx 服務器 | OpenEuler24 | 192.168.10.103 | nginx-1.26.3 |
?3.1.3案例實施
1.Tomcat2 server配置
? ? ? Tomcat2 server 配置方法基本同 Tomcat1,其中包括:
? ? (1)關閉防火墻。
? ? (2)確認是否安裝 JDK,JAVA 版本與 Tomcat1 server 保持一致。
? ?(3)安裝配置 Tomcat,版本與 Tomcat1 server 保持一致。
? ?(4)創建 /web/webapp1 目錄,修改 Tomcat 配置文件 server.xml,將網站文件目錄更改到 /web/webapp1 / 路徑下。
? ?(5)在 /web/webapp1 / 路徑下建立 index.jsp,為了區別將測試頁面 index.jsp 的內容更改如下。
[root@localhost ~]# vim /web/webapp1/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>
<body>
<div>動態頁面的圖片 2</div><br><img src="logo.jpg">
</body>
</html>
3.1.4Nginx服務器配置
? ?在 Nginx 服務器 192.168.10.103 上安裝 Nginx,反向代理到兩個 Tomcat 站點,并實現負載均衡。
(1)關閉防火墻。
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
(2)安裝相關軟件包。
[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker
(3)解壓并安裝 Nginx。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@nodel ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar zxf nginx-1.26.3.tar.gz
[root@localhost ~]# cd nginx-1.26.3
[root@localhost nginx-1.26.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-pcre
[root@localhost nginx-1.26.3]# make && make install
(4)配置 nginx.conf。
? ? ?配置命令如下:
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
? ?在 http {…} 中加入以下代碼,設定負載均衡的服務器列表,weight 參數表示權重,權重越高,被分配到的概率越大。為了使測試效果比較明顯,我們把權重設置為一樣。
upstream tomcat_server {
server 192.168.10.101:8080 weight=1;
server 192.168.10.102:8080 weight=1;
}
下面是編輯 Nginx 靜態頁面文件。
[root@nginx conf]# vim /usr/local/nginx/html/index.html
server {
listen 80;
server_name localhost;
#charset koi8-r; 把 #號去掉,utf-8
#access_log logs/host.access.log main;
location ~ .jsp{ proxy_set_header Hosthost;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
}
location ~ .(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
location / {
root html;
index index.html index.htm;
}
…… // 省略部分內容
…… // 省略部分內容
}
下面在 Nginx 上準備靜態圖片。
[root@nginx ~]# mkdir /usr/local/nginx/html/img // 創建靜態文件目錄
[root@nginx ~]# cp /root/logo.jpg/usr/local/nginx/html/img
測試 Nginx 配置文件是否正確。
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
啟動 Nginx 服務。
[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看 Nginx 服務進程。
root@localhost ~]# ps aux | grep nginx
root 5279 0.0 0.0 9836 2264 ? Ss 09:00 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx 5280 0.0 0.0 11568 4052 ? S 09:00 0:00 nginx: worker process
root 5315 0.0 0.1 21988 7852 pts/0 S+ 09:03 0:00 grep --color=auto nginx
nginx 查看端口號及 PID 進程號。
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13304/nginx: master