日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Nginx Tomcat 動靜分離實現(xiàn)負載均衡

 印度阿三17 2019-09-05

0.前期準備

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

1.一份Nginx.conf配置文件


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

2.基礎講解

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

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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

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

indexindex.jspindex.htmlindex.htmindex.php

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

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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

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

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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



給個首頁看看效果

不要在意請求數(shù)不一樣,那兩個請求是谷歌插件來的。不用覺得我在騙你。


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

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

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

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

在http段進行基本配置


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

userwww www;

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

我們rm -rf /dev/shm/JieLiERP/proxy_* 下面的所有文件(注意這里如果是進行多次測試的話要nginx -s reload 重新讀取配置或重啟服務,因為你rm -rf只是刪除了緩存文件,但是緩存的結構信息還在nginx進程里面,結構還在,如果不重啟的話,是會出現(xiàn)訪問不到的)

所以要記得重啟哦。下面是運行效果


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



第一次訪問

第二次訪問,在瀏覽器中Ctrl Shift R 強制刷新


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



Nginx Tomcat 動靜分離實現(xiàn)負載均衡



到這里已經(jīng)快結束了。最后也是比較關鍵的一個技術點,就是集群,集群,集群。這個就要用到upstream了,看到最開頭的配置文件了嗎,就是那個


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



Nginx Tomcat 動靜分離實現(xiàn)負載均衡



上面那個就是集群組了。upstream是關鍵字,static 和 dynamic是兩個服務器集群組的名稱。以第一個為例,server 127.0.0.1:808 是服務器地址,后面的weight=1 是權重。有多個就寫多個。

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

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

到這里就結束了。

把上面各個部分根據(jù)自己需求配置起來就可以實現(xiàn)單機房負載均衡了。 上面這種做法有一個缺點就是在前面的那一臺nginx如果當機,后面所以機器就失去了被訪問的能力了,所以需要在前面實現(xiàn)多個nginx多機房的負載。關于這個就是另外一個話題了。目前還沒有研究。以后有機會再說了。

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

治標的辦法是,配置輪詢規(guī)則,根據(jù)用戶請求的IP進行Hash,然后分配對應的服務器。具體配置如下:


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



這樣就可以實現(xiàn)一個用戶對應一個服務器節(jié)點。這樣就不會有重復登錄的問題。另一種治本的辦法是,利用緩存系統(tǒng)進行session的統(tǒng)一存儲管理。具體的做法我還沒有試驗過,參考資料有相關的文章,可以了解一下。

Nginx增加SSL功能,同樣的Nginx默認是有SSL模塊功能,我們不用額外安裝,只需要簡單的配置就可以了。首先我們先來生成一些必要的證書。制作的過程還是比較簡單的。


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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

(雖然自己生成的證書可以用,但是還是抵擋不了DNS欺騙,所以這種不安全證書,跟沒有其實是一樣的。不過據(jù)說這樣可以阻止運營商劫持。)


Nginx Tomcat 動靜分離實現(xiàn)負載均衡



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


Nginx Tomcat 動靜分離實現(xiàn)負載均衡


來源:https://www./content-3-440601.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多