天天看點

使用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. 使用者請求動态資源
    使用nginx和tomcat配置反向代理和動靜分離
  2. 使用者請求靜态資源
    使用nginx和tomcat配置反向代理和動靜分離

具體配置方法

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

首先找到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提供服務,實作了反向代理。

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

繼續閱讀