本次目的是使用Nginx負載均衡,下面開始記錄過程以及發生的問題的解決:
準備最少2個Tomcat,2個Tomcat默認端口是8080,需要更改一個爲其他端口
我這裏是8080與8081,更改端口在conf目錄下的server.xml中配置,端口,訪問端口,端口。避免啓動發送端口占用問題
啓動Tomcat先測試訪問:
訪問1:
訪問2:
準備工作完畢後,這就是2個服務者。當有客戶來時,由這兩個服務交替分擔服務客戶去
下載Nginx工具
在logs目錄下,有2個日誌需要注意:
一個Access成功訪問日誌,一個是error錯誤日誌。啓動出現錯誤,或是成功訪問查看日誌。在logs中
接下來如何配置呢?讓Nginx管理我們的Tomcat去調度處理請求:
編輯conf目錄下的nginx.conf文件,配置的有這樣幾個地方注意:
upstream test.com將Tomcat註冊到Nginx容器中,test.com只是個名稱。listen Nginx監聽的端口,location /當出現請求,交給誰去處理。
什麼是代理,在Java中有靜態與動態代理。代理是在代碼前後插入操作。幫你完成一些操作。proxy_pass,當有人來請求Nginx時,這時在這之前由誰去處理本次請求。按照url,進入到我們配置的服務池中,挑選服務來處理請求
在這個配置中,完成了這樣的步驟:
1:按照url將服務註冊到容器中,給容器取個名字便於引用
2:配置Nginx監聽端口
3:配置請求時由誰來處理,填寫容器的url,url是容器名字
中間這幾句代碼:
upstream test.com { #test.com是名字,隨意取,容器內是n個服務對象,weight權重描述,越大服務被分配概率則越大
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=1;
}
server {
listen 81; #監聽端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(css|js|jpg|png)$ { #遇到資源時,處理的路徑,經常發生404,配置進行處理
root /;
}
location / {
proxy_pass http://test.com; #當有人請求時,交與給誰處理?填寫容器url,挑選服務進行處理
proxy_redirect default;
}
......................
配置到這裏就可以了,start nginx.exe啓動nginx。
啓動後,在window任務管理區是管不掉,一次是啓動2個,關閉一個,又打開。
關閉命令:taskkill /im nginx.exe /f
Linux可以嘗試使用kill關閉,還未測試
訪問Nginx監聽的81端口,已經轉到Tomcat爲8080身上去處理了,資源全部請求成功,網站小圖標因爲沒有
當我們多訪問兩次,就換了一個服務者來進行處理了
我這裏將圖片都放在了跟目錄下的img上。因爲配置時:
location ~ .*\.(css|js|jpg|png)$ {
root /;
}
有遇到這樣的請求,轉到/根目錄下去,這樣路徑就是:
http://192.168.1.8:81/img/xxxxx.png
192.168.1.8:81,在收到請求時,被8080去處理了。url是:192.168.1.8:8080。
剩下的uri是:img/xxxxx.png,這個照片就符合conf的配置,進去根目錄,按照img去img下找文件了。
爲什麼配個這?當url是:192.168.1.8:8080時,這個時候,如果我不配置/,那麼就是相對路徑,則去工程目錄下找。
我的嘗試是,在工程路徑下找能找到,問題是,6個照片,每次請求,總會有1-2個照片404,刷新一次請求,之前404的照片就出來了。但其他的照片又404了。意思是,資源並沒有完整的下載下來。配置在外面,去請求外部的資源,反而自己都請求到了。故有此一配。
其餘就沒啥了,Nginx。我們將服務註冊進去,由這個容器,來決定由他裏面的服務池,選誰來處理請求。這就是所謂的負載均衡。爲啥需要這,因爲一個服務器吃不住的時候,可以多個服務同時服務客戶。那麼這時候,大家都請求一個服務,由一個服務去告訴客戶端去請求誰,將客戶分擔出去。分擔處理減少壓力。這就是負載均衡乾的事情。合理的選擇擇優服務去處理。
有個問題是這樣,如何保證處理者與客戶端始終是一個呢?如果服務者不是一個,數據可能會亂掉。那就只有做標識了