1. 程式人生 > >使用nginx如何讓一個tomcat下的多個應用可以被多個域名繫結

使用nginx如何讓一個tomcat下的多個應用可以被多個域名繫結

這個是原創。

首先下載一個nginx反代理軟體。我不說他的原理,只說他能做什麼事情。

這個軟體能做哪些事情?

1他能處理負載均衡的問題。

2能處理多個站點或者多個應用session共享問題。

3可以讓你在一臺機器上面的一個tomcat下面的多個應用程式被域名所繫結。(今天討論的就是這個話題)

首先記住一點:1如果你的伺服器是在海外,你的域名不用備案照樣可以訪問(但是幾個弊端,一是訪問速度上面因為走的網路的路線不一樣會導致你的站點訪問很卡,二是由於國家工信部那邊需要嚴格控制網際網路資訊管理這塊,所以如果你不備案,你的站點如果訪問量大了,是可以被查封的。而查封的最好的方式就是讓使用者不能直接去訪問你的網路埠80埠,80埠是網路通訊的預設埠)2.如果你想要你的站點快,不會存在被封的情況,那你選擇的伺服器應該是大陸的,可能有人說香港那邊的伺服器也會很快,我只能說同一樣的配置,大陸的肯定是比你香港那邊的要快,因為這個要看情況,要看你的站點面向的群體是大陸還是香港。

  所以80埠是網路的預設埠,如果你要讓別人訪問域名直接就能訪問,你必須要監聽這個埠。而nginx剛好幫你做了這個事情。

那第一步,我們先讓自己的tomcat下面的應用訪問起來。這個不用說大家都知道了。

比如現在:http://localhost:8080/site1         http://localhost:8080/site2是你tomcat下面的兩個應用;你現在有www.yyyy.com,www.uuu.com,www.zzz.com.

假設你現在想要www.yyy.com,www.uuu.com 訪問的時候都訪問到site1這個應用去,www.zzz.com訪問site2.怎麼做?

步驟:tomcat下面的server.xml檔案

1先看看你的site1是在tomcat的那個目錄,然後複製他的上一層目錄。比如我的是在webapps下面的ROOT下面,我在ROOT下面放了兩個應用,site1,site2.(首先記住你的目錄)

2找到tomcat下的conf下面的server.xml檔案。在這個檔案裡面有一個標籤Host,記住是這個,不是Engine標籤,Engine是父標籤,Host是子標籤。

現在把Host子標籤刪除替換成下面的內容

//這裡配置表示你建立了一個虛擬主機,這個虛擬主機可以使用www.yyy.com繫結訪問這個C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1應用

- <Host name="www.yyy.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1" /> </Host> //這裡配置表示你建立了一個虛擬主機,這個虛擬主機可以使用www.uuu.com繫結訪問這個C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1應用
- <Host name="www.uuu.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1" /> </Host> //這裡配置表示你建立了一個虛擬主機,這個虛擬主機可以使用www.zzz.com繫結訪問這個C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site2應用
 <Host name="www.zzz.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">  <Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site2" />  </Host> tomcat這邊的事情就處理完了。tomcat操作只要修改server.xml就行了,現在修改好了。

步驟第二大步:nginx怎麼做?

1首先現在nginx這個軟體。記住他是分不同平臺的,有很多版本,根據你的伺服器來選擇,window下載window版本,linux下載linux版本,別弄錯誤了。

2下載完了解壓nginx隨便到伺服器的任何一個位置,官方是建議放置在C盤。假設你現在放到了D盤跟目錄下,你的nginx解壓後,你把這個資料夾改名為nginx,那在這個nginx下面就會有一個nginx.exe(這裡指的是window下的),先不要執行這個,如果你執行表示你啟動它,先不要啟動,先配置。

3找到conf下面的nginx.conf檔案,在這個裡面會有很多程式碼,我們不用管,找到server{}這個。server{}可能有多個。我們先看第一個他配置並修改成下面:(那www.yyy.com與www.uuu.com都將會訪問到你的site1了,為什麼訪問到site1?因為你在server.xml中建立了www.yyy.com與www.uuu.com的虛擬主機,然後你在nginx中又進行了配置。當瀏覽器訪問www.yyy.com的時候其實預設是訪問www.yyy.com:80由於80埠是預設埠,可以省略。所以你等於是訪問了你tomcat的預設專案site1.)記住一點:這些都是在你域名管理那邊已經配置你的域名解析是綁定了你的伺服器的地址的條件下你才能成功。

server {
        listen       80;
        server_name  www.yyy.com www.uuu.com;


        #charset koi8-r;


        #access_log  logs/host.access.log  main;


       location / {   
    proxy_set_header Host www.yyy.com;
            proxy_pass http://127.0.0.1:8080/;
        
}

}

現在再繼續如何讓www.zzz.com訪問site2了?同樣的道理,在nginx.conf中的server{}下面新增一個像上面類似的配置,如:

server {
        listen       80;
        server_name  www.zzz.com;


        #charset koi8-r;


        #access_log  logs/host.access.log  main;


       location / {   
    proxy_set_header Host www.zzz.com;
            proxy_pass http://127.0.0.1:8080/;
        
}

那兩個都配置好了。現在先啟動tomcat看是否能啟動起來,如果能啟動,說明你tomcat那邊是沒問題的了。

然後我們啟動你加壓到D盤跟目錄下面的nginx下面的exe程式,讓他監聽埠。如果啟動起來了。你就成功了。

在瀏覽器中輸入www.yyy.com,www.uuu.com都會訪問到site1.www.zzz.com會訪問到site2.

這個是本人自己親身配置得來的結果。網上很多都不夠詳細,大部分都是copy轉貼的。如果有什麼疑問聯絡qq137075251