Tomcat服务器 Varnish代理服务器
Tomcat服務器
?概述
Java簡介
Java是一種跨平臺的,面向對象的程序設計語言,Java技術具有卓越的通用性,高效性,平臺移植性和安全性
體系
Java ?SE (標準版)
Java ?EE (企業版)
JDK簡介
?JDK(Java ?Development ?Kit)是Sun針對Java開發者推出的Java語言的軟件開發工具包
?JDK是整個Java的核心
- 包括了Java的運行環境
- ?Java工具(如編譯,排錯,打包等工具)
- Java基礎的類庫
?JDK
JRE(Java Runtime Environment,Java運行環境),JRE是JDK的子集
JRE包括
- ?Java虛擬機(jvm)
- Java核心類庫和支持文件
- ?不包含開發工具(JDK)--編譯器,調試器和其他工具
?Java Servlet
?
- Servlet是Java擴展Web服務器功能的組件規范
- 常見的Servlet容器
| IBM? | websphere |
| Oracle? | weblogic |
| Apache | tomcat |
| RedHat | jboss |
Tomcat安裝
Tomcat工作原理
Connector----> 代表端口
Service--------> 提供服務
server----------> 服務器
host------------->?代表虛擬主機
當客戶端從8080端口訪問頁面,不僅可以訪問上面的Host還能訪問下面的Host
Apache和Nginx的每一個虛擬機主機都是和端口綁死的.Tomcat不是.
比如:做加密網站,Apache和Nginx配置了一個虛擬主機,那么就是配置的那臺虛擬主機有加密功能
Tomcat只需配置一次加密,所有的網站都能享受加密功能,以下案例會展示
安裝部署Tomcat服務器
問題
本案例要求部署Tomcat服務器,具體要求如下:
- 安裝部署JDK基礎環境
- 安裝部署Tomcat服務器
- 創建JSP測試頁面,文件名為test.jsp,顯示服務器當前時間
然后客戶機訪問此Web服務器驗證效果:
- 使用火狐瀏覽器訪問Tomcat服務器的8080端口,瀏覽默認首頁
- 使用火狐瀏覽器訪問Tomcat服務器的8080端口,瀏覽默認測試頁面
?方案
使用2臺RHEL7虛擬機,其中一臺作為Tomcat服務器(192.168.2.100)、另外一臺作為測試用的Linux客戶機(192.168.2.5),如圖所示。使用RPM安裝JDK基礎環境,使用源碼安裝部署Tomcat服務器
步驟
步驟一:部署Tomcat服務器軟件(192.168.2.100/24)
1)使用RPM安裝JDK環境
在web1(192.168.2.100)上面安裝 [root@web1 ~]# yum -y install java-1.8.0-openjdk //安裝JDK(可以tab鍵) [root@web1 ~]# java -version //查看JAVA版本 openjdk version "1.8.0_161" OpenJDK Runtime Environment (build 1.8.0_161-b14) OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)2)安裝Tomcat(apache-tomcat-8.0.30.tar.gz軟件包,在lnmp_soft中有提供)
[root@web1 ~]# cd lnmp_soft/ [root@web1 lnmp_soft]# ls apache-tomcat-8.0.30.tar.gz apache-tomcat-8.0.30.tar.gz [root@web1 ~]# tar -xf apache-tomcat-8.0.30.tar.gz [root@web1 ~]# mv apache-tomcat-8.0.30 /usr/local/tomcat [root@web1 ~]# ls /usr/local/tomcat bin/ //主程序目錄 lib/ //庫文件目錄 logs/ //日志目錄 temp/ //臨時目錄 work/ //自動編譯目錄jsp代碼轉換servlet conf/ //配置文件目錄 webapps/ //頁面目錄3)啟動服務
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh4)服務器驗證端口信息
[root@web1 ~]# ss -nutlp |grep java //查看java監聽的端口 tcp 0 0 :::8080 :::* LISTEN 2778/java tcp 0 0 :::8009 :::* LISTEN 2778/java tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2778/java提示:如果檢查端口時,8005端口啟動非常慢,默認tomcat啟動需要從/dev/random讀取大量的隨機數據,默認該設備生成隨機數據的速度很慢,可用使用下面的命令用urandom替換random(非必須操作)。
[root@web1 tomcat]# strings /dev/random #Tomcat啟動時會讀取random的隨機數據,隨機數據越多,啟動的越快 [root@web1 ~]# mv /dev/random /dev/random.bak [root@web1 ~]# ln -s /dev/urandom /dev/random另外,還可以使用方案二解決:
[root@web1 ~]# yum install rng-tools [root@web1 ~]# systemctl start rngd [root@web1 ~]# systemctl enable rngd5)客戶端瀏覽測試頁面(proxy作為客戶端)
[root@proxy~]# firefox ?192.168.2.100:8080查看Tomcat的默認頁面是否存在
[root@web1 tomcat]# cd /usr/local/tomcat/webapps/ROOT/ [root@web1 ROOT]# ls asf-logo.png bg-middle.png bg-upper.png index.jsp tomcat.gif tomcat.svg asf-logo-wide.gif bg-nav-item.png build.xml RELEASE-NOTES.txt tomcat.png WEB-INF bg-button.png bg-nav.png favicon.ico tomcat.css tomcat-power.gif#一定要以.jsp為結尾步驟二:修改Tomcat配置文件
1)創建測試JSP頁面
[root@web1 ~]# vim /usr/local/tomcat/webapps/ROOT/test.jsp <html> <body> <center> Now time is: <%=new java.util.Date()%> //顯示服務器當前時間 </center> </body> </html>步驟三:驗證測試
1)客戶端瀏覽測試頁面(proxy充當客戶端角色)
[root@proxy ~]# firefox http://192.168.2.100:8080 [root@proxy ~]# firefox http://192.168.2.100:8080/test.jsp使用Tomcat部署虛擬主機
問題
使用Tomcat部署加密虛擬主機,實現以下要求:
- 實現兩個基于域名的虛擬主機,域名分別為:www.a.com和 www.b.com
- 使用www.a.com域名訪問的頁面根路徑為/usr/local/tomcat/a/ROOT
- 使用www.b.com域名訪問的頁面根路徑為/usr/local/tomcat/b/base
- 訪問www.a.com/test時,頁面自動跳轉到/var/www/html目錄下的頁面
- 訪問頁面時支持SSL加密通訊
- 私鑰、證書存儲路徑為/usr/local/tomcat/conf/cert
- 每個虛擬主機都擁有獨立的訪問日志文件
- 配置tomcat集群環境
?
方案
修改server.xml配置文件,創建兩個域名的虛擬主機,修改如下兩個參數塊:
?
步驟
- 步驟一:配置服務器虛擬主機
1)修改server.xml配置文件,創建虛擬主機
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml 123 <Host name="www.a.com" appBase="a" 124 unpackWARs="true" autoDeploy="true"> 125 </Host> 126 <Host name="www.b.com" appBase="b" 127 unpackWARs="true" autoDeploy="true"> 128 </Host> 129 <Host name="localhost" appBase="webapps" 130 unpackWARs="true" autoDeploy="true">#在原本的123行復制模板,粘貼在123行之上,做兩個虛擬主機,appBase表示這個目錄下面的子目錄將自動被部署為應用unpackWARs表示自動解壓autoDeploy表示自動部署更新#嚴格區分大小寫!!!!!!!!!!2)創建虛擬主機對應的頁面根路徑
[root@web1 ~]# mkdir -p /usr/local/tomcat/{a,b}/ROOT [root@web1 ~]# ls /usr/local/tomcat/a ROOT [root@web1 ~]# ls /usr/local/tomcat/b ROOT [root@web1 ~]# echo "aaaaa" > /usr/local/tomcat/a/ROOT/index.html [root@web1 ~]# echo "bbbbb" > /usr/local/tomcat/b/ROOT/index.html3)重啟Tomcat服務器
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh [root@web1 ~]# /usr/local/tomcat/bin/startup.sh #重啟后記得重新查看端口確認是否重啟成功 [root@web1 ~]# ss -anutlp | grep java tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=5404,fd=73)) tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=5404,fd=51)) tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=5404,fd=46))4)客戶端設置host文件,并瀏覽測試頁面進行測試(proxy充當客戶端角色)
注意:ssh遠程連接時使用使用-X參數才可以!!!
?
- 步驟二:修改www.b.com網站的首頁目錄為base
1)使用docBase參數可以修改默認網站首頁路徑
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml 123 <Host name="www.a.com" appBase="a" 124 unpackWARs="true" autoDeploy="true"> 125 </Host> 126 <Host name="www.b.com" appBase="b" 127 unpackWARs="true" autoDeploy="true"> 128 <Context path="" docBase="base"/>#在同一個虛擬主機里允許寫多個<Context path>,Context path相當于地址跳轉,當訪問Context path下的路徑時,實際訪問到的是docBase下的路徑 129 </Host> 130 <Host name="localhost" appBase="webapps" 131 unpackWARs="true" autoDeploy="true"> [root@web1 ~]# mkdir /usr/local/tomcat/b/base [root@web1 ~]# echo "lallalal" > /usr/local/tomcat/b/base/index.html [root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh [root@web1 ~]# /usr/local/tomcat/bin/startup.sh2)測試查看頁面是否正確(proxy充當客戶端角色)
[root@proxy ~]# firefox http://www.b.com:8080/ //結果為base目錄下的頁面內容 [root@proxy ~]# curl http://www.b.com:8080/ lallalal- 步驟三:跳轉
1)當用戶訪問http://www.a.com/test打開/var/www/html目錄下的頁面
?
2)測試查看頁面是否正確(proxy充當客戶端角色)
[root@proxy ~]# firefox http://www.a.com:8080/test //返回/var/www/html/index.html的內容 //注意,訪問的端口為8080- 步驟四:配置Tomcat支持SSL加密網站
1)創建加密用的私鑰和證書文件
[root@web1 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore //提示輸入密碼為:123456 //-genkeypair 生成密鑰對 //-alias tomcat 密鑰別名 //-keyalg RSA 定義密鑰算法為RSA算法 //-keystore 定義密鑰文件存儲在:/usr/local/tomcat/keystore2)再次修改server.xml配置文件,創建支持加密連接的Connector
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml … … 85 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" /> //備注,默認這段Connector被注釋掉了,刪除84行和88行注釋,添加密鑰信息即可3)重啟Tomcat服務器
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh [root@web1 ~]# /usr/local/tomcat/bin/startup.sh [root@web1 ~]# ss -anutlp | grep java tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=6115,fd=77)) tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=6115,fd=52)) tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=6115,fd=46)) tcp LISTEN 0 100 :::8443 :::* users:(("java",pid=6115,fd=51)) #此時端口變為四個默認端口4)客戶端設置host文件,并瀏覽測試頁面進行測試(proxy充當客戶端角色)
[root@proxy ~]# vim /etc/hosts … … 192.168.2.100 www.a.com www.b.com [root@proxy ~]# firefox https://www.a.com:8443/ [root@proxy ~]# firefox https://www.b.com:8443/ [root@proxy ~]# firefox https://192.168.2.100:8443/- 步驟五:配置Tomcat日志
1)為每個虛擬主機設置不同的日志文件
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml .. .. <Host name="www.a.com" appBase="a" unpackWARS="true" autoDeploy="true"> <Context path="/test" docBase="/var/www/html/" /> #從默認localhost虛擬主機中把Valve這段復制過來,適當修改下即可 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="a_access" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.b.com" appBase="b" unpackWARS="true" autoDeploy="true"> <Context path="" docBase="base" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="www_a_com" suffix=".log"pattern="%h %l %u %t "%r" %s %b" /> </Host> .. ..2)重啟Tomcat服務器
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh [root@web1 ~]# /usr/local/tomcat/bin/startup.sh3)查看服務器日志文件
[root@web1 ~]# cd /usr/local/tomcat/logs[root@web1 logs]# ls catalina.2020-01-15.log host-manager.2020-01-15.log localhost_access_log.2020-01-15.txt www_a_com.2020-01-15.log catalina.out localhost.2020-01-15.log manager.2020-01-15.log[root@web1 logs]# cat www_a_com.2020-01-15.log #第一次查看,沒有任何訪問記錄,用客戶端訪問 [root@proxy ~]# firefox http://www.a.com:8080 #客戶端進行訪問[root@web1 logs]# cat www_a_com.2020-01-15.log 192.168.2.5 - - [15/Jan/2020:15:52:46 +0800] "GET / HTTP/1.1" 200 6 192.168.2.5 - - [15/Jan/2020:15:52:46 +0800] "GET /favicon.ico HTTP/1.1" 404 1016- 步驟六:擴展實驗(配置Tomcat集群)
1) 在192.168.4.5主機上配置Nginx調度器
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf http{upstream toms {server 192.168.2.100:8080;server 192.168.2.200:8080;}server {listen 80;server_name localhost;location / {proxy_pass http://toms;}} }2) 在192.168.2.100和192.168.2.200主機上配置Tomcat調度器
以下以Web1為例:
3 ) 為了更好的看出兩個web服務器的區別,修改首頁頁面
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml .. ..<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Context path="" docBase="base"/> .. .. </Host> [root@web1 ~]# mkdir /usr/local/tomcat/webapps/base [root@web1 ~]# echo "web1AAA" > /usr/local/tomcat/webapps/base/index.html3)啟動服務
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh [root@web1 ~]# /usr/local/tomcat/bin/startup.sh [root@web1 ~]# ss -ntulp | grep java tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=6852,fd=85)) tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=6852,fd=55)) tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=6852,fd=46)) tcp LISTEN 0 100 :::8443 :::* users:(("java",pid=6852,fd=51))4) 客戶端驗證
為了防止有數據緩存,可以使用真實主機的google-chrome訪問代理服務器,輸入Ctrl+F5刷新頁面。
?
?
Varnish代理服務器
什么是CDN
? ?cdn全稱為內容分發網絡(Content Delivery Network)。基本思想是盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸地更快、更穩定。通過在互聯網各處放置節點服務器來構成在現有的互聯網基礎上的一層只能虛擬網絡,cdn系統能夠實時地根據網絡流量和個節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。目的是為了用戶就近取所需內容,解決了網絡擁擠問題,提高用戶的響應速度。
?如果需要自己搭建CDN系統,有3種主流方案可以選擇
squid
varnish
Nginx+memcache
用varnish實現cdn
? 在當前主流的Web架構中,Cache擔任著越來越重要的作用。常見的基于瀏覽器的C/S架構,Web Cache更是節約服務器資源的關鍵。而最近幾年由FreeBSD創始人之一Kamp開發的varnish更是一個不可多得的Web Cache Server。嚴格意義上說,Varnish是一個高性能的反向代理軟件,只不過與其出色的緩存功能相比,企業更愿意使用其搭建緩存服務器。同時,由于其工作在Web Server的前端,有一部分企業已經在生產環境中使用其作為舊版本的squid的替代方案,以在相同的服務器成本下提供更好的緩存效果,Varnish更是作為CDN緩存服務器的可選服務之一。
代理服務器概述
- proxy,代理人,經紀人,中介
- 代理用戶處理事務
能提供正常情況下不便或無法訪問的資源
- 應用場景
- 代理服務器工作機制
Varnish服務器
- Varnish是一款高性能且開源的反向代理服務器,是一個web緩存代理器
- Varnish具有性能高,速度快,管理更方便等諸多優點
配置Varnish服務器
問題
通過配置Varnish緩存服務器,實現如下目標:
- 使用Varnish加速后端Web服務
- 代理服務器可以將遠程的Web服務器頁面緩存在本地
- 遠程Web服務器對客戶端用戶是透明的
- 利用緩存機制提高網站的響應速度
- 使用varnishadm命令管理緩存頁面
- 使用varnishstat命令查看Varnish狀態
?
方案
通過源碼編譯安裝Varnish緩存服務器
編譯安裝Varnish軟件
修改配置文件,緩存代理源Web服務器,實現Web加速功能
使用3臺RHEL7虛擬機,其中一臺作為Web服務器(192.168.2.100)、一臺作為Varnish代理服務器(192.168.4.5,192.168.2.5),另外一臺作為測試用的Linux客戶機(192.168.4.10),如圖所示。
對于Web服務器的部署,此實驗中僅需要安裝nginx或者httpd軟件、啟動服務,并生成測試首頁文件即可,默認httpd網站根路徑為/var/www/html,首頁文檔名稱為index.html,默認nginx網站根路徑為/usr/local/nginx/html,默認首頁為index.html。下面的實驗我們以httpd為例作為Web服務器。
步驟
步驟一:構建Web服務器
1)使用yum安裝web軟件包
[root@web1 ~]# yum -y install httpd2)啟用httpd服務(注意需要關閉nginx,否則端口沖突)
[root@web1 ~]# systemctl start httpdhttpd服務默認通過TCP 80端口監聽客戶端請求:
[root@web1 ~]# netstat -anptu | grep httpd tcp 0 0 :::80 :::* LISTEN 2813/httpd3)為Web訪問建立測試文件
在網站根目錄/var/www/html下創建一個名為index.html的首頁文件:
4)測試頁面是否正常(代理服務器測試后臺web)
[root@proxy ~]# firefox http://192.168.2.100步驟二:部署Varnish緩存服務器(192.168.4.5)
1)編譯安裝軟件
[root@proxy ~]# yum -y install gcc readline-devel //安裝軟件依賴包 [root@proxy ~]# yum -y install python-docutils //安裝軟件依賴包 #如果安裝過nginx則以下不需要安裝 [root@proxy ~]# yum -y install pcre-devel //安裝軟件依賴包 [root@proxy ~]# yum -y install python-docutils //安裝軟件依賴包[root@proxy ~]# cd lnmp_soft/ #練習環境下源碼包都在這里 [root@proxy lnmp_soft]# ls apache-tomcat-8.0.30.tar.gz nginx-1.15.8.tar.gz redis-3.0.6.tar.gz apache-tomcat-9.0.6.tar.gz nginx.conf.bak tomcat_session buffer.sh nginx.spec varnish-5.2.1.tar.gz [root@proxy ~]# useradd -s /sbin/nologin varnish //創建賬戶 [root@proxy ~]# tar -xf varnish-5.2.1.tar.gz [root@proxy ~]# cd varnish-5.2.1 [root@proxy varnish-5.2.1]# ./configure [root@proxy varnish-5.2.1]# make && make install2)復制配置文件(注意相對路徑與絕對路徑)
[root@proxy varnish-5.2.1]# cp etc/example.vcl /usr/local/etc/default.vcl#拷貝后的名字隨意起3)修改代理配置文件
[root@proxy varnish-5.2.1]# vim ?/usr/local/etc/default.vcl16 backend default { #修改后臺原始站點17 .host = "192.168.2.100";18 .port = "80";19 }.. ..4)啟動服務
[root@proxy varnish-5.2.1]# varnishd ?-f ?/usr/local/etc/default.vcl? Debug: Platform: Linux,3.10.0-862.el7.x86_64,x86_64,-junix,-smalloc,-smalloc,-hcritbit Debug: Child (14530) Started#注意看端口是否被占用!!!!!!!!!!!//varnishd命令的其他選項說明如下: //varnishd -s malloc,128M 定義varnish使用內存作為緩存,空間為128M //varnishd -s file,/var/lib/varnish_storage.bin,1G 定義varnish使用文件作為緩存步驟三:客戶端測試
1)客戶端開啟瀏覽器訪問
[root@client ~]# curl http://192.168.4.5 123456步驟四:其他操作
1)查看varnish日志
[root@proxy ~]# varnishlog //varnish日志 [root@proxy ~]# varnishncsa //訪問日志2)更新緩存數據,在后臺web服務器更新頁面內容后,用戶訪問代理服務器看到的還是之前的數據,說明緩存中的數據過期了需要更新(默認也會自動更新,但非實時更新)。
[root@proxy ~]# varnishadm varnish> ban req.url ~ .* //清空緩存數據,支持正則表達式例: [root@web1 logs]# cd /var/www/html #在web1服務器上切換到網頁目錄根路徑 [root@web1 html]# echo cc > c.html #書寫網頁文件做測試 [root@client ~]# curl http://192.168.4.5/c.html cc #客戶端訪問,此時是cc [root@web1 html]# echo 11 > c.html #此時后臺做一下更改 [root@client ~]# curl http://192.168.4.5/c.html cc #客戶端仍然是cc,說明此時客戶端看到的是緩存的數據,大約一到兩分鐘左右會自動更新數據手動清除緩存: [root@web1 html]# echo dd > d.html #書寫網頁文件做測試 [root@client ~]# curl http://192.168.4.5/d.html dd #訪問頁面 [root@web1 html]# echo 44 > d.html #后臺做一下修改 [root@client ~]# curl http://192.168.4.5/d.html dd #此時仍然是dd [root@proxy varnish-5.2.1]# varnishadm #手動修改清除d.html緩存 varnish> ban req.url ~ d.html 200 [root@client ~]# curl http://192.168.4.5/d.html 44 #此時客戶端訪問直接變為了新的數據?
總結
以上是生活随笔為你收集整理的Tomcat服务器 Varnish代理服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Session与Cookie
- 下一篇: 版本控制 Git RPM打包