使用nginx和tomcat配置反向代理和動靜分離

背景

本人主修的編程語言是Java語言,因此最開始接觸的Web開發也是JSP技術。使用Java開發的Web應用需要部署在專門的服務器程序上運行,比如Tomcat。但是一般很少會有人將Tomcat作爲用戶直接訪問的服務器的,一般都是使用nginx或者Apache進行反向代理。我使用的是nginx。nginx是一個俄羅斯程序員開發的服務器程序,它本身只能提供靜態資源的服務,但它的優點在於併發訪問量可以達到非常大的水平。

反向代理的優點

反向代理的主要優點是提高併發訪問數。單獨一個Tomcat服務器能提供的併發訪問數不高,如果在主機上部署多個Tomcat服務器,使用nginx進行反向代理,動態調整用戶的請求到不同的Tomcat服務器(這個過程稱爲負載均衡),就可以使併發訪問量和單個Tomcat服務器相比得到成倍的提升。

動靜資源分離也常常和反向代理在一起被提起,比如你部署了一個Java Web應用,這是一個動態資源,需要Tomcat提供服務(由反向代理實現),但你的網站上同時還有其他的比如純HTML的網頁、圖片等等靜態資源,這些靜態資源就可以由nginx直接提供給訪問者,減少了調用Tomcat而產生的多餘資源消耗,同樣靜態資源可以獲得相當大的一個併發訪問量。

可以畫一張圖來更清晰地表明反向代理的工作流程。

  1. 用戶請求動態資源
    動態資源
  2. 用戶請求靜態資源
    靜態資源

具體配置方法

配置的方法有很多,我以我自己的實現方法來進行講解。

首先找到nginx的配置文件nginx.conf。如果是使用yum安裝的nginx那麼它的默認路徑是在/etc/nginx/中。在該文件中找到:

server {
        listen       80;  
        server_name  localhost;

        location / {
            root   /user/share/nginx/html;
            index  index.html index.htm;
        }  

        ……

也有可能和上述內容有些許不同,重點是listen 80,只要找到它,就確定了位置。

80端口一般代表http協議,也就是我們在瀏覽器上輸入網址或者IP地址時默認使用的訪問協議。server_name用於配置虛擬主機,我們現在暫時用不到。重點在location。location後面代表訪問的虛擬目錄,/代表根目錄,,也就是直接輸入域名或IP地址訪問的目錄,以本地主機爲例,就是直接在瀏覽器裏輸入127.0.0.1。在location的大括號裏面,root代表的是虛擬目錄映射在本地主機上的實際目錄,如果是使用yum方式安裝的nginx,那麼它的默認訪問目錄是/user/share/nginx/html。index後面代表的是該目錄的首頁文件,像示例中就設定了首頁文件爲index.html或者index.htm。

假如我們要用nginx反向代理tomcat,並且希望在瀏覽器直接輸入主機的IP地址時訪問到nginx默認的首頁,而輸入主機的IP地址/tomcat時訪問到tomcat上的內容,我們就要這樣配置。

server {
        listen       80;  
        server_name  localhost;

        location / {
            root   /user/share/nginx/html;
            index  index.html index.htm;
        }  

        location /tomcat {
            proxy_pass   http://127.0.0.1:8080;
        }
        ……

加上去的內容就相當於告訴nginx,在用戶訪問IP地址/tomcat時,就將訪問請求傳遞到8080端口(因爲tomcat默認運行在8080端口,如果修改過tomcat默認運行端口,就將8080改成修改後的端口號)。

這樣配置完成後,我們就同時實現了動靜資源分離和反向代理。直接訪問IP地址時,nginx給用戶的是靜態資源,減小計算資源的消耗,訪問IP地址/tomcat時則由tomcat提供服務,實現了反向代理。

上面講的是最基本的配置反向代理和動靜分離的方法,還有更加高級的方法,比如設置不同的三級域名訪問到不同的目錄,動靜分離特定格式的文件等等。在此我不做展開,大家有興趣可以去網上尋找其他資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章