Apache2.2 於 NAT 後方正常使用 VirtualHost (兩個以上的網站在同一主機上)
這次只是純紀錄我搞好久的東西,沒想到一個小動作就解決了,害我爬文這麼久 Orz
若我們要在同一個主機上跑兩個以上網站,有很多種方法可以做,第一個是在主機上綁不同的 Public IP,第二個就是在同一個 domain 下建立不同的子目錄跑不一樣的網站,第三種呢,就是本文要說的,通常獨立的網站都會有一個代表性的 Domain,但是在同一台主機下要跑不同 Domain 的網站就得靠這第三種的方法,底下聽我娓娓道來。
這種方式呢,就是 Apache2 內建的 VirtualHost
功能 (不需額外安裝套件),VirtualHost
有兩種設定方式,一種是 ip-base,就是用於一台主機上有兩組以上的 Public IP,用 Domain 綁 IP 到網站,另一種是 name-base 的方式,也就是用 Domain 的方式綁網站,通常會比較建議用 name-base 的方式問題會比較少,對於浮動 IP 架站來說的人會比較方便,以下我們來看看設定方式吧
打開 /etc/httpd/conf/httpd.conf
1 | NameVirtualHost domainA.urdomain:80 #綁你主要的 Domain,這個參數在 Apache 2.4 中會被移除,要注意 |
理論上來說,只要設定好,網站就能看 Domain 分別跑網站了,但小弟本人是架在 NAT 底下,就是用一台 IP 分享器以 PPPoE 連上網路,然後用 port forwarding 的方式把 80 port 轉到伺服器上,就在小弟儲存設定了,也把 Apache 重開了,卻發現不管怎麼樣上面的設定都沒有用,都一直跑 Apache 的預設頁面 (有 It Works! 的那個頁面),在 google 上爬文許久,有人說要改 Linux 的 /etc/hosts
,原本以為是個 trick,想說怎麼可能要設定這個東西,但是人就是不能太鐵齒(其實是為自己太廢找理由),我就抱著死馬當活馬醫的心態設定看看,所以我在 hosts 裡面分別設定 domain 的 Private IP 居然就好了,實在是槌心肝啊。
1 | vim /etc/hosts |
1 | 192.168.xxx.xxxx domainA.urdomain domainB.urdomain #(xxx 的部份就自己下 ifconfig 指令自己看自己改囉) |
以上,只要在 /etc/hosts
裡加上這行就好了,前面的 IP 還不能是 127.0.0.1 喔,也不能是 Public IP,其實原理如何我也不太清楚,我一直以為只要 domain 解析是自己家的 Public IP,分享器負責幫我 port forwarding 就好了說… Orz