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

背景

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

反向代理的優勢

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

動靜資源分離也經常和反向代理在一塊兒被提起,好比你部署了一個Java Web應用,這是一個動態資源,須要Tomcat提供服務(由反向代理實現),但你的網站上同時還有其餘的好比純HTML的網頁、圖片等等靜態資源,這些靜態資源就能夠由nginx直接提供給訪問者,減小了調用Tomcat而產生的多餘資源消耗,一樣靜態資源能夠得到至關大的一個併發訪問量。程序員

能夠畫一張圖來更清晰地代表反向代理的工做流程。編程

  1. 用戶請求動態資源
    瀏覽器

  2. 用戶請求靜態資源
    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提供服務,實現了反向代理。

上面講的是最基本的配置反向代理和動靜分離的方法,還有更加高級的方法,好比設置不一樣的三級域名訪問到不一樣的目錄,動靜分離特定格式的文件等等。在此我不作展開,你們有興趣能夠去網上尋找其餘資料。

相關文章
相關標籤/搜索