2016-03-15 50 views
1

我有三個非常相似的靜態網站版本,我想在相同的虛擬機上同一個nginx實例託管(最好)。DNS魔術可以從nginx託管多個版本的同一網站?

比方說,我的網站的內容佈局,像這樣:

/opt/mysite/ 
    flavor1/ 
     index.html 
     ...all content for first flavor/version of the site 
    flavor2/ 
     index.html 
     ...all content for second flavor/version of the site 
    flavor3/ 
     index.html 
     ...all content for third flavor/version of the site 

等,現在讓我們假設VM具有的9000.1.2.3一個公網IP(我知道這是我只是用這種不合法的IPv4一個例子)。當我nginx的配置,像這樣:

http { 
    server { 
     listen  8080; 
     server_name localhost; 
     location/{ 
      root /opt/mysite 
      index index.html index.htm; 
     } 
    } 
} 

...然後啓動nginx的,我可以去9000.1.2.3:8080並查看默認的nginx的歡迎屏幕。到現在爲止還挺好。

現在讓我們假裝我已經購買了三個域名:example.com,example.netexample.info。我真正想要的是這樣的:

| Domain Name |  Maps to  | Which then serves | 
|--------------|:---------------:|:---------------------:| 
| example.com | 9000.1.2.3:8080 | /opt/mysite/flavor1/* | 
| example.net | 9000.1.2.3:9200 | /opt/mysite/flavor2/* | 
| example.info | 9000.1.2.3:9300 | /opt/mysite/flavor3/* | 

意義,如果我去,說,http://example.com/fizz,那麼最終9000.1.2.3/opt/mysite/flavor1/fizz是被返回了什麼。但是如果我要求http://example.info/fizz,那麼9000.1.2.3/opt/mysite/flavor3/fizz最終會返回。

我個人不在乎需要做什麼魔術來完成這個:或許DNS配置,nginx調優,IP轉發等等。所以我不關心我上面表格中的中間列( 「地圖到」一欄)。我只需要一種方法來調用這三個域,以便通過運行在單個虛擬機上的相同nginx實例來提供/支持,但爲我提供不同版本的站點。有任何想法嗎?

+1

也許你可以使用更復雜的服務器來提供文件服務和服務器可以選擇什麼味道來使用基於主機名? – matanso

+0

感謝@matanso(+1)但是如果可能的話,我真的很想將它保存到nginx。 – smeeb

回答

2

試試這個:

server { 
    server_name example.com; 
    location/{ 
     root /var/flavor1; 
    } 
} 
server { 
    server_name example.net; 
    location/{ 
     root /var/flavor2; 
    } 
} 
+0

謝謝@matanso(+1) - 我會給它一個旋轉!同時,我可以假設我可以將所有'A'記錄映射到相同的'9000.1.2.3' IP,而無需任何其他特殊配置(在DNS層)?再次感謝! – smeeb

+0

是的,我相信你應該做的。 – matanso

相關問題