對於架站者來說,如果只擁有一台主機但需要架設兩個以上的網站,那麼如何在同一個 IP(伺服器)上用不同的 Domain Name(網域名稱)架設多個網站?網路上某些教學是設定同 IP 但不同 Port,不過這是蠻爛的方法。因此本篇設定的重點就是以 Apache Virtual Host 的方式來對應多筆網域名稱,依照不同的網域名,提供不同的網頁內容。

Virtual Host.png

前情提要:本篇使用 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 這兩個資料夾。

網頁檔案放置完成後,就打開瀏覽器上去測試看看吧!如果上述步驟都設定成功,伺服器應該就可以依不同的網域名稱進入的連線,指派對應的網頁資料夾。

延伸閱讀:「教學」Amazon EC2 Ubuntu 建立並啟動 WordPress 網站