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

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