1. 程式人生 > >初識TomCat之3——TomCat動靜分離

初識TomCat之3——TomCat動靜分離

tomcat 動靜分離

一、背景介紹
在生產環境中tomcat很少直接用於響應客戶端請求,即使它可以通過Connector組件接收用戶的請求,一般來說常見於server.xml配置文件中Connector連接器的類型有3種:http、SSL和AJP 1.3
技術分享圖片
在生產環境中,tomcat前端一般會有一個專門的web服務器來接收用戶請求,常用的web服務器由apache和nginx,他們各自特點如下:
nginx:易於實現動靜分離,將動態請求反代給後端的tomcat服務器,但與tomcat之間只能走http或SSL協議,不支持AJP協議。
apache:與tomcat同屬於ASF軟件,兼容性更好,在反代tomcat時可以走二進制的AJP協議,效率更高,但動靜分離很困難。
下面分別已apache和nginx為例做關於tomcat反代的實驗。
二、網絡拓撲
網絡拓撲如下圖所示:
技術分享圖片
用戶向web服務器發出請求,web服務器將用戶請求反代至tomcat服務器,使用Nginx當web服務器時實現動靜分離,使用apche當web服務器時分別實現http和ajp協議。本次試用的操作系統為CentOS7.4,JDK版本1.8,tomcat版本8.5,nginx版本1.12.1。
三、操作步驟
1.nginx實現動靜分錄
安裝nginx服務,並設置訪問的地址,將以.jsp或者.do結尾的請求都發往指定地址
技術分享圖片
此時再訪問自定義的網站時nginx服務器會相應靜態內容請求
技術分享圖片
而以.jsp或者.do結尾的請求會重定向到tomcat上
技術分享圖片
需要註意的是:使用nginx在做反代時後端如果有多個虛擬主機,反代的地址要用虛擬主機的地址而不能是IP地址,否則tomcat的默認主機不是你要訪問的主機時會被定義到其他主機上
技術分享圖片
2.apache實現http和jsp協議反代
apache的反代功能由主模塊(proxy_module)和子模塊proxy_xxx_module共同完成
技術分享圖片

(1)安裝httpd服務,註銷掉DocumentRoot
技術分享圖片
(2)本次還是基於虛擬主機測試,在conf.d目錄下創建vhost.conf配置文件
技術分享圖片
關閉虛擬主機的正向代理,ProxyPass可以設置成IP地址就是因為相較於nginx而言apache多了一個ProxyPreserveHost選項,可以傳遞用戶請求的虛擬主機名給後端,此時通過域名訪問發現被定向到tomcat的對應虛擬主機中

技術分享圖片
而通過IP地址訪問會被定向到默認虛擬主機
技術分享圖片
實現ajp的方法只是將apache反代服務器配置文件中http改成ajp即可,如果有不需要重定向的資源,可以用!阻止重定向
技術分享圖片
但在此之前需要在tomcat服務器上確認AJP連接器處於正常偵聽狀態
技術分享圖片
四、補充說明
在使用apache進行反代的時候,開始總是由503報錯頁面,該問題在使用nginx是未發生,查看日誌發現由於權限原因無法與後端服務器建立連接
技術分享圖片
最後發現是SElinux原因導致,關閉SElinux,恢復正常
技術分享圖片

初識TomCat之3——TomCat動靜分離