2012/08/24

[apache2] 在NAT底下使不同網站共用80port





先說說我這邊的網路環境

VDSL小烏龜接ASUS-AP在分給兩台主機

![架構圖](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtLa8t8n3iXIp9VQMnpZHi7wKMkNH4Dh0EmdHQ1keBI6o8gjhkaJvtjNI5NLAfkCjpuT3gREkPDEW84AyLpH17vKtejgrs64DFaCsRH3eU4EsviasYQXHAEYaXDbaiXCf2mZ10q0YTzg/s1600/netstruct.png)

Server A的domain為 www.mydomain.tw
其底下有架設很多個virtualhost(play.mydomain.tw、cool.mydomain.tw)

Server B是我新的一台主機 預計給他的domain是ubuntu.mydomain.tw


從外部連到http://mydomain.tw會跑去Server A

現在Server B也要架一個Web(http://ubuntu.mydomain.tw)

由於Server A已經佔用了外部WAN IP(12.34.56.78)的80 port
(AP的NAT是設12.34.56.78:80給172.16.16.2:80)

所以如果直接在DNS上設定ubuntu.mydomain.tw的A紀錄或是CNAME紀錄到最後都會跑到Server A去

但又不想要設12.34.56.78:81給172.16.16.3:80

因為這樣瀏覽web時要加上port號(http://ubuntu.mydomain.tw:81)

這樣實在很醜

有沒有辦法可以做到我的需求:

瀏覽http://www.mydomain.tw會吐出Server A的這個virtualhost東西

瀏覽http://ubuntu.mydomain.tw會吐出Server B的這個virtualhost東西



那就是利用proxypass了

第一步驟先設定好你DNS的紀錄不管是A或CNAME都可以

是A的話把 ubuntu.mydomain.tw 設 12.34.56.78

是CNAME的話 ubuntu.mydomain.tw 設 www.mydomain.tw
(這部分不詳述)

再來就是重點了

在Server A的apache的設定檔要多設
```
<virtualhost *:80>
ServerName ubuntu.mydomain.tw
ProxyRequest Off # 這邊要為Off才安全
ProxyPreserve On
ProxyPass / http://ubuntu.mydomain.tw
ProxyPassReverse / http://ubuntu.mydomain.tw
</VirtualHost>
```

再來,由於Server A這台電腦也不知道ubuntu.mydomain.tw要如何解

所以必須要指定
Windows在C:\windows\system32\drivers\etc\hosts加上
```
172.16.16.3 ubuntu.mydomain.tw
```

Linux在/etc/hosts加上
```
172.16.16.3 ubuntu.mydomain.tw
```

Server B上的apache要把ServerName設為ubuntu.mydomain.tw喔

全部改完後不要忘記重起服務阿

一切正常後外部連連看http://ubuntu.mydomain.tw

應該就可以正常顯示Server B的網站囉

沒有留言:

張貼留言