對於架站者來說,如果只擁有一台主機但需要架設兩個以上的網站,那麼如何在同一個 IP(伺服器)上用不同的 Domain Name(網域名稱)架設多個網站?網路上某些教學是設定同 IP 但不同 Port,不過這是蠻爛的方法。因此本篇設定的重點就是以 Apache Virtual Host 的方式來對應多筆網域名稱,依照不同的網域名,提供不同的網頁內容。
前情提要:本篇使用 EC2 虛擬主機以及 Ubuntu 作業系統,若使用不同配置可參考相關教學來修改對應的設定。
首先,要設定 Apache 的 Virtual Hosts 之前,當然伺服器要有安裝 Apache,如果沒有的話可以用 apt-get
指令來安裝:
sudo apt-get update
sudo apt-get install apache2
第一步|建立網頁根目錄
由於目的是要在同個伺服器提供多個網頁,因此為不同的網域名稱建立個別的網頁資料夾。為了方便說明多個網域名稱的設定,這邊假設兩個網域名稱 aaa.com
以及 bbb.com
作為教學範例,而 Ubuntu 預設的網頁根目錄路徑為 /var/www/
,因此我們在這個目錄下建立兩個網頁資料夾:
sudo mkdir -p /var/www/aaa.com/public_html
sudo mkdir -p /var/www/bbb.com/public_html
第二步|設定根目錄權限
建立完資料夾後,預設擁有者就是 root 使用者(Ubuntu 預設的 root 使用者名稱就是 ubuntu),如果要使用不同的系統使用者來管理,可以透過以下的指令來變更權限,記得將 user
更換成自己的使用這名稱。
sudo chown -R user:user /var/www/aaa.com/public_html
sudo chown -R user:user /var/www/bbb.com/public_html
接著設定檔案的讀寫權限,確保網頁伺服器能正常讀寫網頁資料夾以及子目錄下的所有檔案。
sudo chmod -R 755 /var/www/
第三步|建立 Virtual Host 檔案
我們使用 Apache 預設的 Virtual Hosts 設定檔來修改,將預設設定檔複製到相同資料夾並重新命名成目標網域名稱,這邊先以剛剛假設的 aaa.com 來示範:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/aaa.com.conf
接著使用 root 權限編輯新的設定檔:
sudo nano /etc/apache2/sites-available/aaa.com.conf
設定檔原始的內容應該包含這段文字:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
首先先在 ServerAdmin 後面填寫伺服器管理員的 Email 以免哪天收到信(本人註冊網域那麼久從來沒收過):
ServerAdmin [email protected]
接著更改 DocumentRoot 後面的網頁根目錄路徑:
DocumentRoot /var/www/aaa.com/public_html
最後在 <VirtualHost *:80>
下方加入網域名稱設定,在 ServerName
後方填入原始的網域名稱,而 ServerAlias
則可以設定同網域的其他名稱,如加上 www 的版本:
ServerName aaa.com
ServerAlias www.aaa.com
修改完成後設定檔中的 VirtualHost 設定應該會是這樣:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName aaa.com
ServerAlias www.aaa.com
DocumentRoot /var/www/aaa.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
儲存並關閉設定檔。
重複上述的步驟,複製第一個網域的設定檔來建立第二個網域的設定檔:
sudo cp /etc/apache2/sites-available/aaa.com.conf /etc/apache2/sites-available/bbb.com.conf
複製完成後同樣進入編輯模式:
sudo nano /etc/apache2/sites-available/bbb.com.conf
依照上面的模式修改第二個設定檔:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName bbb.com
ServerAlias www.bbb.com
DocumentRoot /var/www/bbb.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
儲存並關閉,兩個網域都設定完成了。
第四步|啟用 Virtual Host 檔案
使用 a2ensite
指令來啟用設定檔:
sudo a2ensite aaa.com.conf
sudo a2ensite bbb.com.conf
完成後重新啟動 Apache 服務,設定才會生效:
sudo service apache2 restart
第五步|置入網頁檔案
完成網域設定後,可以將網頁檔案(如果已經做好了)放入第一步建立的網頁資料夾裡面。比如說在這個範例就是 /var/www/aaa.com/public_html
跟 /var/www/bbb.com/public_html
這兩個資料夾。
網頁檔案放置完成後,就打開瀏覽器上去測試看看吧!如果上述步驟都設定成功,伺服器應該就可以依不同的網域名稱進入的連線,指派對應的網頁資料夾。