Nginx实现静态代理,负载均衡,前后端分离
Nginx不單可以作為強(qiáng)大的web服務(wù)器,也可以作為一個反向代理服務(wù)器,而且nginx還可以按照調(diào)度規(guī)則實(shí)現(xiàn)動態(tài)、靜態(tài)頁面的分離,可以按照輪詢、ip哈希、URL哈希、權(quán)重等多種方式對后端服務(wù)器做負(fù)載均衡,同時還支持后端服務(wù)器的健康檢查。
如果只有一臺服務(wù)器時,這個服務(wù)器掛了,那么對于網(wǎng)站來說是個災(zāi)難.因此,這時候的負(fù)載均衡就會大顯身手了,它會自動剔除掛掉的服務(wù)器。
本博客的目的:提供由Nginx實(shí)現(xiàn)前后端分離和負(fù)載均衡的思路,不提供具體實(shí)現(xiàn)的步驟,如果不是很理解前后端分離和負(fù)載均衡可以參考博客前后端分離和負(fù)載均衡
一:靜態(tài)代理
把所有靜態(tài)資源的訪問改為訪問nginx,而不是訪問tomcat,這種方式叫靜態(tài)代理。因?yàn)閚ginx更擅長于靜態(tài)資源的處理,性能更好,效率更高。所以在實(shí)際應(yīng)用中,我們將靜態(tài)資源比如圖片、css、html、js等交給nginx處理,而不是由tomcat處理。
實(shí)現(xiàn)靜態(tài)代理有兩種方法:
方式一 在nginx.conf的location中配置靜態(tài)資源的后綴
根據(jù)擴(kuò)展名進(jìn)行攔截:
整個配置表示以 .后面括號里面的這些后綴結(jié)尾的文件都由nginx處理放置靜態(tài)資源的目錄,要注意一下目錄權(quán)限問題,如果權(quán)限不足,給目錄賦予權(quán)限;否則會出現(xiàn)403錯誤 chmod 755
方式二 在nginx.conf的location中配置靜態(tài)資源所在目錄實(shí)現(xiàn)
由于 /opt/static為我們規(guī)定的靜態(tài)資源訪問的根路徑。但是項(xiàng)目運(yùn)行起來有一個虛擬目錄,所以真正的靜態(tài)資源要放在:/opt/static/項(xiàng)目的虛擬目錄文件下面。
案例: 通過nginx訪問上面myweb案例中的圖片
? 修改nginx.conf文件,在location中配置對靜態(tài)資源的攔截,如果是靜態(tài)資源,就交給nginx處理,使攔截靜態(tài)文件后綴名的方式。
? 重啟nginx
? 瀏覽器訪問nginx服務(wù)器,進(jìn)行測試,發(fā)現(xiàn)圖片無法加載
? 右鍵圖片,查看圖片的地址為http://192.168.235.128/myweb/image/001.jpg,因?yàn)槲覀冊趎ginx中配置了對.jpg的攔截,所以請求會交給nginx服務(wù)器進(jìn)行處理。
根據(jù)ip + port等于root的原則,我們會去/opt/static/myweb目錄下找資源,所以在/opt/static下創(chuàng)建myweb目錄,并放入image目錄及圖片,為了和tomcat上的圖片區(qū)分,我們這里圖片的內(nèi)容發(fā)生了變化。
? 瀏覽器訪問nginx訪問器,進(jìn)行測試 ,圖片訪問正常,而且訪問的是nginx上的圖片
? 將nginx.conf中的location攔截方式修改為攔截靜態(tài)文件目錄的方式
? 重啟nginx服務(wù)器,通過瀏覽器訪問nginx服務(wù)器,進(jìn)行測試,訪問正常,但是訪問的是tomcat服務(wù)器下的圖片
二:負(fù)載均衡
在網(wǎng)站創(chuàng)立初期,我們一般都使用單臺機(jī)器對外提供集中式服務(wù)。隨著業(yè)務(wù)量的增大,我們一臺服務(wù)器不夠用,此時就會把多臺機(jī)器組成一個集群對外提供服務(wù),但是,我們網(wǎng)站對外提供的訪問入口通常只有一個,比如 www.web.com。那么當(dāng)用戶在瀏覽器輸入www.web.com進(jìn)行訪問的時候,如何將用戶的請求分發(fā)到集群中不同的機(jī)器上呢,這就是負(fù)載均衡要做的事情。
負(fù)載均衡通常是指將請求"均勻"分?jǐn)偟郊褐卸鄠€服務(wù)器節(jié)點(diǎn)上執(zhí)行,這里的均勻是指在一個比較大的統(tǒng)計(jì)范圍內(nèi)是基本均勻的,并不是完全均勻。
Nginx通過在nginx.conf文件進(jìn)行配置即可實(shí)現(xiàn)負(fù)載均衡 。
配置如下:(配置2步即可)
A、 在http模塊加上upstream配置
upstream www.myweb.com {
server 127.0.0.1:9100 weight=3;
server 127.0.0.1:9200 weight=1; }
其中weight=1表示權(quán)重,用于后端服務(wù)器性能不均的情況,訪問比率約等于權(quán)重之比,權(quán)重越大訪問機(jī)會越多,upstream是配置nginx與后端服務(wù)器負(fù)載均衡非常重要的一個模塊,并且它還能對后端的服務(wù)器的健康狀態(tài)進(jìn)行檢查,若后端服務(wù)器中的一臺發(fā)生故障,則前端的請求不會轉(zhuǎn)發(fā)到該故障的機(jī)器.
B、 在server模塊里添加location,并配置
proxy_pass location /myweb {
proxy_pass http://www.myweb.com;
}
其中 www.myweb.com 字符串要和 upstream 后面的字符串相等
案例:將一個項(xiàng)目myweb.war部署到兩臺不同的tomcat上,通過nginx實(shí)現(xiàn)負(fù)載均衡。
1、 在linux服務(wù)器/usr/local目錄下,拷貝兩臺新的tomcat
2、將這兩臺tomcat服務(wù)器webapps目錄下沒用的項(xiàng)目刪掉
3、 修改其中一臺tomcat9100的端口號為9100 ,另一臺tomcat的端口號改為9200.
4.將myweb.war上傳到兩臺tomcat服務(wù)器的webapps目錄下
6.瀏覽器直接訪問兩臺tomcat,進(jìn)行測試
但是我們網(wǎng)站一般對外之后提供一個入口地址,所以這個時候可以使用nginx進(jìn)行負(fù)載。
7、 配置nginx
? 在http模塊上加
? 在server模塊加
8、 重啟Nginx
9、 瀏覽器直接訪問nginx進(jìn)行測試
三:前后端分離
Nginx的負(fù)載均衡和靜態(tài)代理結(jié)合在一起,我們可以實(shí)現(xiàn)動靜分離,這是實(shí)際應(yīng)用中常見的一種場景。
動態(tài)資源,如jsp由tomcat或其他web服務(wù)器完成
靜態(tài)資源,如圖片、css、js等由nginx服務(wù)器完成
它們各司其職,專注于做自己擅長的事情
前后端分離充分利用了它們各自的優(yōu)勢,從而達(dá)到更高效合理的架構(gòu)。
架構(gòu)圖
整個架構(gòu)中,一個nginx負(fù)責(zé)負(fù)載均衡,兩個nginx負(fù)責(zé)靜態(tài)代理。Nginx在一臺Linux上安裝一份,可以通過不同的nginx.conf配置文件啟動多個Nginx,每個Nginx的配置文件中不一樣即可。
實(shí)現(xiàn)步驟
1.拷貝兩份nginx配置文件實(shí)現(xiàn)靜態(tài)代理
2.修改新拷貝的nginx81.conf和nginx82.conf配置文件
? Nginx81.conf端口號,因?yàn)檫@兩個機(jī)器只需要做靜態(tài)代理,所以刪除掉負(fù)載均衡的配置
? Nginx82.conf端口號,因?yàn)檫@兩個機(jī)器只需要做靜態(tài)代理,所以刪除掉負(fù)載均衡的配置
? 靜態(tài)代理的配置
3.負(fù)載均衡Nginx配置nginx.conf配置文件
A.動態(tài)資源的負(fù)載均衡
在http模塊加上upstream配置
upstream www.myweb.com {
server 127.0.0.1:9100 weight=5;
server 127.0.0.1:9200 weight=2;
}
在server模塊里添加location,并配 proxy_pass
location /myweb {
proxy_pass http://www.myweb.com;
}
B.靜態(tài)資源的負(fù)載均衡
upstream static.myweb.com {
server 127.0.0.1:81 weight=1;
server 127.0.0.1:82 weight=1;
}
location ~ .*/(css|js|img|images) {
proxy_pass http://static.myweb.com;
}
4.啟動三臺nginx服務(wù)器,啟動兩臺tomcat服務(wù)器
5.瀏覽器輸入http://192.168.235.128/myweb/進(jìn)行測試
關(guān)閉掉一臺nginx靜態(tài)代理服務(wù)器
關(guān)閉掉一臺tomcat服務(wù)器
總結(jié)
以上是生活随笔為你收集整理的Nginx实现静态代理,负载均衡,前后端分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发送ajax请求的四种方式
- 下一篇: Spring的AOP思想和实现AOP思想