ApacheVirtualHost多網域網站放置在同一台主機
在 Apache 上設定 VirtualHost 是牙齒掉下來然後又腐化掉的問題,但這問題又久久才會處理一次,剛不小心出了一點小問題,於是稍微記錄一下提醒自己。
設定 VirtualHost 目的是使用同一個伺服器架設多個網站,當使用者以不同網域名稱連到該主機時, web server 會依據不同的目的網頁需求,回應不同的網頁內容。
-----------------------------------------------------------------------------------------
基本的說完,底下來看怎麼設定 Virtual Host
Step 0:DNS 主機設定多個網域名稱對應到同一台主機
Step 1:修改 /etc/httpd/conf/httpd.conf
Step 2:重新啟動 httpd 測試
Step 3:更好的作法
--------------------------------
Step 1:修改 /etc/httpd/conf/httpd.conf
sudo vi /etc/httpd/conf/httpd.conf
當你單一網站的 apache 設定好後,你的 /etc/httpd/conf/httpd.conf 便可以正確的指定到你第一個網頁的 DocumentRoot ,而在 httpd.conf 的最底下會有 Virtual Host 設定的相關提示
意即要開啟 Virtual Host 功能只要將範例的參數(底下標示粗體斜體字)改成你的環境參數就OK了
底下例子以上面綠底圖範例作說明 www.n.com 為第一個網站,a.n.com 為第二個增加的網站
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@a.n.com
DocumentRoot /www/docs/n/a
ServerName a.n.com
ErrorLog logs/a.n.com-error_log
CustomLog logs/a.n.com-access_log common
</VirtualHost>
QQ:那我犯的錯誤在哪?
Ans:原本的 httpd.conf 設定只要綁定 IP:port 跟預設的 DocumentRoot 就能呈現你第一個原始的網站,即使你 ServerName 不改都能正常的運作。
但是~~啟用 virtualhost 後,他是以使用者要求的網域名稱來判斷該回應哪個網頁內容回去
所以~~你必須也寫一段原本網頁的 VirtualHost 片段
如果~~漏了這步驟,只有指定 virtual host 的網站才能呈現,原本的網站網址會出現 Internal Server Error
於是~~要多寫一段關於原本網頁的 virtual host
<VirtualHost *:80>
ServerAdmin webmaster@www.n.com
DocumentRoot /www/docs/n
ServerName www.n.com
ErrorLog logs/www.n.com-error_log
CustomLog logs/www.n.com-access_log common
</VirtualHost>
再加入第三個網站,只需要再增加 xx.n.com 的 virtualhost 片段即可
<VirtualHost *:80>
ServerAdmin webmaster@xx.n.com
DocumentRoot /www/docs/n/xx
ServerName xx.n.com
ErrorLog logs/xx.n.com-error_log
CustomLog logs/xx.n.com-access_log common
</VirtualHost>
Step 2:重新啟動 httpd 測試
sudo service httpd restart
Step 3:更好的作法
在 /etc/httpd/conf/httpd.conf 裡增加專屬於 virtualhost 的設定檔,並且 include 近來
sudo vi /etc/httpd/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
sudo vi /etc/httpd/conf/extra/httpd-vhosts.conf 預設可能沒有這個檔案,要自行增加
然後把上面字體「藍色字」的設定部分,全部移動到這個檔案中,然後重新啟動就搞定了~~
sudo service httpd restart
~End