溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

發(fā)布時(shí)間:2021-08-09 14:47:30 來(lái)源:億速云 閱讀:120 作者:Leah 欄目:服務(wù)器

今天就跟大家聊聊有關(guān)Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

 0.前期準(zhǔn)備

使用Debian環(huán)境。安裝Nginx(默認(rèn)安裝),一個(gè)web項(xiàng)目,安裝tomcat(默認(rèn)安裝)等。

1.一份Nginx.conf配置文件

基本配置這個(gè)文件,就可以實(shí)現(xiàn)負(fù)載了。但是里面的各種關(guān)系要了解就比較麻煩了。這篇博客,也不是教學(xué)篇,是記錄一下,方便以后自己看了。

2.基礎(chǔ)講解

現(xiàn)在假使有一臺(tái)電腦192.168.8.203這臺(tái)電腦,上面部署了Tomcat,里面8080端口有J2EE的服務(wù),通過(guò)瀏覽器可以正常瀏覽網(wǎng)頁(yè)?,F(xiàn)在有一個(gè)問(wèn)題tomcat是一個(gè)比較全面的web容器,對(duì)靜態(tài)網(wǎng)頁(yè)的處理,應(yīng)該是比較費(fèi)資源的,特別是每次都要從磁盤讀取靜態(tài)頁(yè)面,然后返回。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡
Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

這中間會(huì)消耗Tomcat的資源,可能會(huì)使那些動(dòng)態(tài)頁(yè)面解析性能影響。秉承Linux哲學(xué),一個(gè)軟件只做一件事的原則。Tomcat就應(yīng)該只處理JSP動(dòng)態(tài)頁(yè)面。這里就用到以前了解的Nginx來(lái)進(jìn)行反向代理。第一步代理,實(shí)現(xiàn)動(dòng)靜網(wǎng)頁(yè)分離。這個(gè)很簡(jiǎn)單的。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

修改nginx的配置文件 /etc/nginx/nginx.conf  默認(rèn)有個(gè)配置文件的。其實(shí)大部分都差不多,關(guān)鍵還是server段的設(shè)置。這里我設(shè)置server段如上所示,其他段復(fù)制就可以了。

server段里面的解釋如下:第35行為監(jiān)聽(tīng)本機(jī)80端口。37-39行表示默認(rèn)主頁(yè),這里的默認(rèn)主頁(yè)我是index.jsp 對(duì)應(yīng)到我項(xiàng)目中是一個(gè)index。  這里根據(jù)需要可以改為

indexindex.jspindex.htmlindex.htmindex.php

具體可參考其他文章。  關(guān)鍵的第40行,這個(gè)是正則匹配,網(wǎng)上也有很多介紹。這里匹配我項(xiàng)目中用到的所有靜態(tài)網(wǎng)頁(yè)后綴。第41行是代理地址。這里我代理到我的web應(yīng)用中。expires  30d緩存為30天,這里的緩存是對(duì)應(yīng)到前端頁(yè)面,用戶的Cache-Control字段

第44行中那個(gè)正則是匹配無(wú)后綴的頁(yè)面。我項(xiàng)目中jsp頁(yè)面是無(wú)后綴的。這里可以根據(jù)需要進(jìn)行修改。同樣代理到192.168.8.203:8080這里。到這里你可能會(huì)問(wèn),這有毛意思啊?當(dāng)然不是這樣了。簡(jiǎn)單的實(shí)現(xiàn)靜動(dòng)分離,我們可以把第41行進(jìn)行修改,改為

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF

表示不代理,直接從本地磁盤拿。通過(guò)查tomcat日志可以看到靜態(tài)頁(yè)面是沒(méi)有訪問(wèn)到的。但這樣又有一個(gè)問(wèn)題。

這樣的靈活性不好,對(duì)下面要講到的內(nèi)存緩存和集群部署來(lái)說(shuō)都是不友好的,所以又有了下面的這種寫(xiě)法。再寫(xiě)一個(gè)server段。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

這次監(jiān)聽(tīng)808端口,然后上上面的代碼41行就可以修改為 proxy_pass  http://192.168.8.203:808了,到這里就實(shí)現(xiàn)了動(dòng)靜分離了。如果多臺(tái)服務(wù)器,就修改對(duì)應(yīng)的ip就可以了。如果發(fā)現(xiàn)連接不上的,要檢查一下防火墻,權(quán)限等外部問(wèn)題,這個(gè)配置是這樣的。

如果單純這樣的話,我們會(huì)發(fā)現(xiàn)頁(yè)面直接傳輸過(guò)于占用帶寬。對(duì)應(yīng)web的優(yōu)化,這里想到的是通過(guò)對(duì)頁(yè)面進(jìn)行g(shù)zip壓縮,然后傳到用戶那里,再解壓,這樣可以有效的減少帶寬。這里就會(huì)用到Nginx  的gzip模塊了。默認(rèn)的Nginx是集成有g(shù)zip模塊的。只需在http段增加下面配置即可。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

給個(gè)首頁(yè)看看效果

不要在意請(qǐng)求數(shù)不一樣,那兩個(gè)請(qǐng)求是谷歌插件來(lái)的。不用覺(jué)得我在騙你。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

作為假使有很多人訪問(wèn)的網(wǎng)站來(lái)說(shuō),緩存肯定是很重要的東西了。

一開(kāi)始是想通過(guò)插件,讓Nginx和Redis進(jìn)行合成,然后Nginx使用Redis來(lái)緩存的,但是發(fā)現(xiàn)配置起來(lái)很麻煩,還要自己下載插件,重新編譯Nginx,比較麻煩,所以這里覺(jué)得用Nginx自帶的緩存也是不錯(cuò)的選擇。

雖然效率比不上redis,但是有還是比沒(méi)有好。Nginx默認(rèn)的緩存是磁盤文件系統(tǒng)的緩存,而不是像Redis那樣的內(nèi)存級(jí)別的緩存。一開(kāi)始我以為Nginx就只有這樣。后來(lái)查了寫(xiě)資料,才知道是我太天真了,對(duì)Linux不是很了解導(dǎo)致的。Linux的一切皆文件。

原來(lái)我們可以把文件緩存到內(nèi)存對(duì)應(yīng)的Linux文件系統(tǒng)中。我說(shuō)的可能比較難以理解,請(qǐng)自行搜索/dev/shm  這個(gè)文件目錄。我們把文件緩存到這個(gè)文件目錄里,其實(shí)就相當(dāng)與內(nèi)存的緩存了。只不過(guò)還是靠文件系統(tǒng)管理。所以比不上自定義格式的Redis那樣的內(nèi)存緩存。

在http段進(jìn)行基本配置

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡
Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

經(jīng)過(guò)這兩個(gè)的配置就基本能實(shí)現(xiàn)了,這里說(shuō)幾個(gè)注意項(xiàng),也是困擾我很久的問(wèn)題。上面第一段代碼第6行,proxy_ignore_headers  如果web項(xiàng)目中的html的head頭里面指定

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

這些不緩存的話,就要加上proxy_ignore_headers的配置項(xiàng)了。還有一點(diǎn)就是/dev/shm下面的文件系統(tǒng)權(quán)限默認(rèn)只給root用戶,所以要chmod  777 -R /dev/shm 這樣不是很安全的做法,如果實(shí)際上線可以給定某個(gè)用戶組,關(guān)于用戶組的設(shè)置是配置的第一行

userwww www;

上面第二段代碼的第6行是增加一個(gè)header字段方便查看是否擊中緩存。

我們r(jià)m -rf /dev/shm/JieLiERP/proxy_* 下面的所有文件(注意這里如果是進(jìn)行多次測(cè)試的話要nginx -s reload  重新讀取配置或重啟服務(wù),因?yàn)槟鉹m -rf只是刪除了緩存文件,但是緩存的結(jié)構(gòu)信息還在nginx進(jìn)程里面,結(jié)構(gòu)還在,如果不重啟的話,是會(huì)出現(xiàn)訪問(wèn)不到的)

所以要記得重啟哦。下面是運(yùn)行效果

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

第一次訪問(wèn)

第二次訪問(wèn),在瀏覽器中Ctrl+Shift+R 強(qiáng)制刷新

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

到這里就可以看到效果了。我們查看一下/dev/shm這個(gè)里面

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡
Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

到這里已經(jīng)快結(jié)束了。最后也是比較關(guān)鍵的一個(gè)技術(shù)點(diǎn),就是集群,集群,集群。這個(gè)就要用到upstream了,看到最開(kāi)頭的配置文件了嗎,就是那個(gè)

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡
Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

上面那個(gè)就是集群組了。upstream是關(guān)鍵字,static 和 dynamic是兩個(gè)服務(wù)器集群組的名稱。以第一個(gè)為例,server  127.0.0.1:808 是服務(wù)器地址,后面的weight=1 是權(quán)重。有多個(gè)就寫(xiě)多個(gè)。

親測(cè)試過(guò),集群中的一個(gè)壞了,不影響系統(tǒng)運(yùn)行。至于更多的輪詢規(guī)則,可以參考網(wǎng)上更多的資料。這里不多說(shuō)。至于怎么使用呢? proxy_pass

http://192.168.8.203:808 改為 proxy_pass http://static; 這樣即可實(shí)現(xiàn)均衡。

到這里就結(jié)束了。

把上面各個(gè)部分根據(jù)自己需求配置起來(lái)就可以實(shí)現(xiàn)單機(jī)房負(fù)載均衡了。  上面這種做法有一個(gè)缺點(diǎn)就是在前面的那一臺(tái)nginx如果當(dāng)機(jī),后面所以機(jī)器就失去了被訪問(wèn)的能力了,所以需要在前面實(shí)現(xiàn)多個(gè)nginx多機(jī)房的負(fù)載。關(guān)于這個(gè)就是另外一個(gè)話題了。目前還沒(méi)有研究。以后有機(jī)會(huì)再說(shuō)了。

上面動(dòng)態(tài)服務(wù)器組如果是那種需要保存用戶狀態(tài)的話,會(huì)有問(wèn)題,就是session問(wèn)題,比如我在server1進(jìn)行登錄后,下一次動(dòng)態(tài)服務(wù)器組進(jìn)行輪詢后可能分配到server2,就會(huì)造成要重新登錄。

治標(biāo)的辦法是,配置輪詢規(guī)則,根據(jù)用戶請(qǐng)求的IP進(jìn)行Hash,然后分配對(duì)應(yīng)的服務(wù)器。具體配置如下:

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

這樣就可以實(shí)現(xiàn)一個(gè)用戶對(duì)應(yīng)一個(gè)服務(wù)器節(jié)點(diǎn)。這樣就不會(huì)有重復(fù)登錄的問(wèn)題。另一種治本的辦法是,利用緩存系統(tǒng)進(jìn)行session的統(tǒng)一存儲(chǔ)管理。具體的做法我還沒(méi)有試驗(yàn)過(guò),參考資料有相關(guān)的文章,可以了解一下。

Nginx增加SSL功能,同樣的Nginx默認(rèn)是有SSL模塊功能,我們不用額外安裝,只需要簡(jiǎn)單的配置就可以了。首先我們先來(lái)生成一些必要的證書(shū)。制作的過(guò)程還是比較簡(jiǎn)單的。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

下面就是配置Nginx了,我們可以把需要用到的client.pem, client.pem,  client.key,unsecure這三個(gè)文件放到Nginx的一個(gè)目錄下,剩下的Nginx配置如下:

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

重啟Nginx,我們就可以訪問(wèn)Https網(wǎng)站了。 但是他喵的出現(xiàn)這個(gè)

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

這個(gè)是沒(méi)有什么問(wèn)題,具體原因是這個(gè)CA證書(shū)要得到認(rèn)可。所以我們上面自己生成的https證書(shū),只是自己生成的,如果要變成下面這種,就需要花錢購(gòu)買了,剩下的這個(gè)自己上網(wǎng)解決。

(雖然自己生成的證書(shū)可以用,但是還是抵擋不了DNS欺騙,所以這種不安全證書(shū),跟沒(méi)有其實(shí)是一樣的。不過(guò)據(jù)說(shuō)這樣可以阻止運(yùn)營(yíng)商劫持。)

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

增加一個(gè),就是在我們輸入http連接時(shí)自動(dòng)跳轉(zhuǎn)到安全的https連接。這個(gè)還是比較實(shí)用的。方法還是有多種的,具體可以看參考資料里面的博客。我是使用下面這一種,我覺(jué)得是比較簡(jiǎn)單的,代碼改動(dòng)比較少的。就是對(duì)80端口進(jìn)行代理轉(zhuǎn)發(fā)。

Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡

看完上述內(nèi)容,你們對(duì)Nginx+Tomcat 中怎么通過(guò)動(dòng)靜分離實(shí)現(xiàn)負(fù)載均衡有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI