Nginx反向 Proxy轉寄tomcat

來源:互聯網
上載者:User

最近剛接觸nginx,在網上查閱了相關資料,看到最多的形容nginx的詞就是反向 Proxy,反向 Proxy是什麼了。一直都不是很理解,於是在網上查了反向 Proxy,下面給出百度百科對反向 Proxy的解釋。


百度百科解釋:反向 Proxy(Reverse Proxy)方式是指以Proxy 伺服器來接受internet上的串連請求,然後將請求轉寄給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求串連的用戶端,此時Proxy 伺服器對外就表現為一個反向 Proxy伺服器。


通過上面的解釋很容易理解nginx反向 Proxy的意思,也就是說nginx就相當於Proxy 伺服器。用戶端發出請求,並不是直接被tomcat伺服器接收處理,而是要先經過nginx,nginx再轉寄給tomcat伺服器;tomcat處理完成返回結果後,也是先經過nginx,nginx再返回用戶端。在整個過程中,nginx貌似充當了真正的伺服器,其實並不是,nginx只是起到了轉寄的作用。


根據反向 Proxy的特性,我們可以把不需要伺服器處理的靜態資源(HTML,JS,CSS等)直接讓nginx處理,JSP等讓伺服器處理,這樣就減輕了伺服器的壓力。


下面來實現一下利用nginx代理轉寄tomcat的執行個體:

1.環境配置

安裝nginx,安裝步驟可參考: Linux系統下Nginx的安裝

安裝tomcat,tomcat安裝很簡單,直接壓縮包解壓就行,這裡就不再細說。


2.運行環境

nginx安裝完成並啟動過後,在瀏覽器直接輸入Linux系統的IP地址,即可訪問,如下所示:


3.配置解析

看到這是不是很好奇,為什麼直接輸入IP就可以進入nginx,是在哪配置的了。看一下nginx的設定檔,一般預設在nginx檔案夾下有個conf檔案夾,裡面有個nginx.conf,開啟發現裡面有一段如下配置:


這段代碼是在設定檔中的server中,一個server相當於一個Proxy 伺服器,可以配置多個server。

裡面幾個屬性的意思分別是:

listen:代表當前Proxy 伺服器的訪問連接埠號碼,預設是80連接埠。如果要配置多個server,這裡的預設連接埠需要改變,要不然系統不知道進入哪個代理服務。

server_name:表示代理服務需要轉寄的地址,預設是localhost。

location:表示匹配用戶端發送請求的路徑,這裡“/”代表所有請求的路徑都能匹配。

root:表示請求別匹配到後,會在這個檔案夾內尋找相應的檔案,root對後面靜態資源的處理很重要。

index:如果代理沒有指定首頁,將預設進入index配置下尋找首頁,可以配置多個,第一個首頁找不到,訪問第二個,以此類推。

error_page:代表發生錯誤後進入的相關錯誤頁面,下面的location也是處理錯誤的相關配置。


PS:剛剛說的nginx.conf路徑在安裝的時候是可以通過–conf-path=配置的,我在安裝的時候就指定了“/etc/nginx/nginx.conf” 這個路徑。但是我還在預設路徑下面找設定檔,確實能找到,但是nginx服務用的並不是這個,而是我安裝時指定的設定檔。所以在後面的操作中就悲劇了,怎麼改設定檔都沒反應,一開始以為什麼地方配置的不對,浪費了好幾個小時的時間,所以在此提醒大家一下。題外話,接下來說正事。


3.配置轉寄tomcat

轉寄tomcat的配置很簡單,只需要在原來的配置上面修改兩個地方,如下:


這裡配置的proxy_pass屬性工作表示代理路徑,nginx可以直接轉寄到該連結。

PS:只配置了一個server情況下,server_name可有可無,系統不會載入該配置。有多個server情況下,server_name必須要配置,nginx服務會根據該配置匹配。

修改完配置過後,別急著重啟nginx服務,怎麼。還有東西要配置。 當然不是,nginx支援熱部署,也就是修改設定檔過後,不需要重啟服務生效,只需要讓nginx重新載入一下即可,很方便吧。如果在載入配置之前想檢查一下設定檔是否有語法錯誤,可以輸入“nginx -t”來檢查錯誤。如下:


接下來重新整理剛剛訪問nginx的頁面,發現訪問的頁面已經變成我們要轉寄的tomcat了,頁面如下:


頁面效果和我們直接輸入“http://172.16.21.92:8080/”的效果一樣。


4.動、靜資源分離

上面說了根據nginx反向 Proxy的特性,可以實現用戶端訪問靜態資源時,不請求tomcat伺服器,減少伺服器壓力。要想實現該功能同樣的需要配置nginx.conf的server配置,如下:


上面代碼新加了一個location配置,用於過濾靜態檔案,當用戶端請求這些靜態檔案時,nginx會轉寄到“/usr/local/ROOT/”檔案夾下(ROOT檔案夾是從tomcat的webapps裡面拷貝出來的),從而不需要請求伺服器。

這時再重新整理訪問nginx的頁面,發現頁面沒有變化,但是點擊tomcat首頁"Security Considerations HOW-TO"串連,發現報404錯誤,如下圖:


這時為什麼了。 原因是這個html頁面是在tomcat 的webapps裡面的docs檔案夾下,但是我們配置靜態資源轉寄路徑是到ROOT檔案夾下面,nginx找不到HTML檔案,所以就報404錯誤。同時也驗證了配置的靜態資源與伺服器分離是沒有問題的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.