1. 程式人生 > >Nginx學習總結(10)——Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

Nginx學習總結(10)——Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

一、談談“渲染”

相信好多人都挺聽過“渲染”這個詞,但不清楚它是什麼意思?前端開發以為這是後端的活兒,後端開發以為是前端的事兒,推著推著就不了了之。其實渲染很簡單,不說概念,直接舉例:

1、 後端渲染:以JSP為例,可以分成三步

a、編寫標籤或Java程式碼(可以稱之為模板)

b、在JSP編譯階段被轉換成Servlet編譯為Servlet Class

c、執行編譯後的程式碼,將響應(模板執行結果)返回給頁面

優勢:減少前端工作,前端只需要設計純頁面,其他的都由後端來做;

缺點:依賴於伺服器端,增大伺服器壓力,前後端職責分工不明確;

應用場景:在頁面不太多、渲染壓力不大、伺服器端能夠承受範圍內可以使用後端渲染。

2、 前端渲染:以基於js的模板引擎為例

a、編寫模板程式碼

b、通過模板引擎將模板轉化為指令碼語言,拼接在JS中(第一次拼接,以後使用快取)

c、頁面載入執行JS

優勢:減少伺服器壓力,前後端職責可以很好地分開,後端只做Json資料介面,前端進行渲染;

缺點:前端渲染依賴於客戶端,增大的前端壓力,需要代理伺服器、末班渲染引擎的支援;

應用場景:在前端頁面較多,前端開發人員能力較強,需要前後端分離的場景可以使用前端渲染(前端渲染是趨勢)。

二、談談nginx

1、談談為什麼會用到nginx?

首先明確一件事,瀏覽器可以發出請求嗎?可以!那我們為什麼要用到伺服器呢?因為我們的前端如果不依賴伺服器,頁面就只能訪問本地資源而不能訪問伺服器上的資源,而我們的後臺一定是寫在伺服器上的。所以舉個例子,我們在使用Tomcat伺服器時,就必須把前端資源架在Tomcat上,才能訪問後臺的servlet。如下圖所示:

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

所以當我們希望前後端分離時,前端的資源就不能放在Tomcat上面,那如何獲得Tomcat的資源的?這就用到了nginx,如下圖所示:

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

2、談談nginx的反向代理

有反向代理必有正向代理,先談談正向代理:一般預設的代理都是正向代理,使用者訪問不了一個資源,然後通過代理伺服器去訪問這個資源,將響應帶回給使用者。關鍵在於使用者知道自己訪問的是其他伺服器的資源,代理伺服器不會掩飾URL

反向代理是,代理伺服器也是在中間層,但是使用者不知道自己訪問的資源是其他伺服器的資源,代理伺服器會掩飾URL

3、談談如何使用nginx反向代理tomcat

(1)首先開啟nginx,兩種方式,一種是直接點選ngnix.exe,一種是使用命令列,cd到nginx目錄下,start nginx,無報錯即啟動成功

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

(2)啟動成功後,如何驗證,因為ngnix.conf核心配置檔案預設配置監聽80埠,所以瀏覽器開啟localhost,看到如下顯示:

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

(3)下一步就是配置反向代理Tomcat,開啟conf目錄下的nginx.conf檔案,主要看35行左右開始的程式碼,下面是我修改過的程式碼:

主要修改lacation屬性,使所有的請求都被轉發到http://localhost:8080的Tomcat伺服器下處理:

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

listen:是監聽的埠,即使用者訪問nginx服務的埠

server_name:服務名,經過測試並不會影響到什麼

location:定義資源型別與伺服器中資源地址url的對映關係,可在/後面定義資源型別,可設定多個location

其中proxy_pass代表要反向代理的伺服器資源url,只要資源型別匹配,在這個url下的子路徑資源都可以訪問到,

其中root代表本地的資源路徑,同樣只要資源型別匹配,這個路徑下的子目錄資源都可以被訪問到,

一個location中只能配置一個root或proxy_pass。

(4)修改後ngnix.conf檔案後,使用nginx -s reload指令,重啟ngnix,如果沒有報錯即重啟成功

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

(5)發出請求,獲得Json,url顯示依然是80埠的資源,即我們說的反向代理的特點,掩飾url,效果如下圖所示:

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

事實上,nginx是將請求轉發到Tomcat伺服器,是8080埠下的資源,如下圖所示:

Nginx前後端分離將多個請求轉發到多個Tomcat,負載均衡反向代理

(6)如果不光有Tomcat伺服器的資源,那麼就需要定義多個location,比如,jsp資源請求就轉發到Tomcat伺服器下,PHP、html、js、css等資源資源可以轉到Apache伺服器目錄下,如下圖配置示例:

location ~ .jsp$ {

proxy_pass http://localhost:8080;

} location ~ .(html|js|css|png|gif)$ {

root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;

}