本文設(shè)計的動靜分離結(jié)構(gòu)
?
在本文中,我們將靜態(tài)資源放在 A 主機(jī)的一個目錄上,將動態(tài)程序放在 B 主機(jī)上,同時在 A 上安裝 Nginx 并且在 B 上安裝 Tomcat。配置 Nginx,當(dāng)請求的是 html、jpg 等靜態(tài)資源時,就訪問 A 主機(jī)上的靜態(tài)資源目錄;當(dāng)用戶提出動態(tài)資源的請求時,則將請求轉(zhuǎn)發(fā)到后端的 B 服務(wù)器上,交由 Tomcat 處理,再由 Nginx 將結(jié)果返回給請求端。
?
提到這,可能有您會有疑問,動態(tài)請求要先訪問 A,A 轉(zhuǎn)發(fā)訪問 B,再由 B 返回結(jié)果給 A,A 最后又將結(jié)果返回給客戶端,這是不是有點(diǎn)多余。初看的確多余,但是這樣做至少有 2 點(diǎn)好處。第一,為負(fù)載均衡做準(zhǔn)備,因?yàn)殡S著系統(tǒng)的發(fā)展壯大,只用一臺 B 來處理動態(tài)請求顯然是是不夠的,要有 B1,B2 等等才行。那么基于圖 2 的結(jié)構(gòu),就可以直接擴(kuò)展 B1,B2,再修改 Nginx 的配置就可以實(shí)現(xiàn) B1 和 B2 的負(fù)載均衡。第二,對于程序開發(fā)而言,這種結(jié)構(gòu)的程序撰寫和單臺主機(jī)沒有區(qū)別。我們假設(shè)只用一臺 Tomcat 作為服務(wù)器,那么凡是靜態(tài)資源,如圖片、CSS 代碼,就需要編寫類似這樣的訪問代碼:<img src=”{address of A}/a.jpg”>,當(dāng)靜態(tài)資源過多,需要擴(kuò)展出其他的服務(wù)器來安放靜態(tài)資源時,訪問這些資源就可能要編寫這樣的代碼:<img src=”{address of C}/a.jpg”>、<img src=”{address of D}/a.jpg”>。可以看到,當(dāng)服務(wù)器進(jìn)行變更或擴(kuò)展時,代碼也要隨之做出修改,對于程序開發(fā)和維護(hù)來說非常困難。而基于上面的結(jié)構(gòu),程序都只 要 <img src=”a.jpg”>,無需關(guān)心具體放置資源的服務(wù)器地址,因?yàn)榫唧w的地址 Nginx 為幫您綁定和選擇。
?
動靜分離的 Nginx 配置
?# 轉(zhuǎn)發(fā)的服務(wù)器,upstream 為負(fù)載均衡做準(zhǔn)備
?upstream tomcat_server{?
??????? server 192.168.8.23:8099;?
?}?
??? server {
??????? listen?????? 80;
??????? server_name? localhost;
??????? #charset koi8-r;
??????? #access_log? logs/host.access.log? main;
?? ??? # 靜態(tài)資源存放目錄
??????? root? /im;?
??????? location / {
??????????? root?? html;
??????????? index? ak47.html index.html index.htm;
??????? }
?????? # 動態(tài)請求的轉(zhuǎn)發(fā)
??????? location ~ .*.jsp$ {?
??????????? proxy_pass http://tomcat_server;?
??????????? proxy_set_header Host $host;?
??????? }?
?# 靜態(tài)請求直接讀取
?location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {?
????????? expires????? 30d;?
?}
新建了一個im文件夾用來存放靜態(tài)圖片資源
其目的和我們預(yù)期的一樣,動態(tài)的請求(以 .jsp 結(jié)尾)發(fā)到 B(192.168.8.23:8099,即 tomcat_server)上,而靜態(tài)的請求(gif|jpg 等)則直接訪問定義的im目錄
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
