身為一位自由工作者,時常會接到不同廠商的網站案子,但同一時間下可能不會只有開發一個網站,但同一個通訊埠(Port)又只能連結一個網站,這時候就需要 VirtualHost 這種東西來解決這樣的問題了,它可以達成讓你根據 URL 的不同而觸發不同的網站來源。

  1. 步驟一、首先我們必須告訴作業系統一些基本的路由,你必須打開你的 終端機 並且輸入以下指令:
1
sudo vim /etc/hosts

補充知識:Vim是從vi發展出來的一個文字編輯器。其代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程式設計師中被廣泛使用。和Emacs並列成為類Unix系統用戶最喜歡的編輯器。
資料來源取自於 WiKi 維基百科

  1. 步驟二、開始新增一些路由,這些路由讓你比較方便管理你的專案開發:
1
2
3
4
5
6
7
8
9
10
11
12
13
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost

127.0.0.1 local.exampleA.com
127.0.0.1 local.exampleB.com
127.0.0.1 local.exampleC.com
  1. 步驟三、輸入完畢後,按一下 ESC 並且輸入 :wq! 即可儲存並退出,做完這些步驟後,電腦就知道如果你在瀏覽器輸入 local.exampleA.comlocal.exampleB.comlocal.exampleC.com 這些地方,那麼這些的目的地就是 127.0.0.1 這個 IP,但這樣還是沒辦法完成多網站的功能,因為 XAMPP 並不曉得哪些網域對應的是哪些專案。

補充知識: :wq! 這是 Vim 的指令,功能是 w(Write) 寫入檔案、q(Quit) 退出檔案,而驚嘆號 ! 則是強制的意思,所以 wq! 意思則是強制寫入檔案並且退出。

  1. 步驟四、所以接下來才真正要使用到 VirtualHost 這東西,首先我們要先開啟 XAMPP 的設定檔案:
1
sudo vim `路徑`
  • macOS 路徑 /Applications/XAMPP/xamppfiles/etc/httpd.conf
  • Linux 路徑 /opt/lampp/etc/httpd.conf
  1. 步驟五、找到一個 <VirtualHost *:80> 的地方,並且改成以下內容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
...

<VirtualHost *:80>
ServerAdmin youremail@example.com
ServerName local.exampleA.com
DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/local.exampleA.com"
ErrorLog "logs/kghs-eserc.com.tw-error.log"
CustomLog "logs/kghs-eserc.com.tw-access.log" combined
<Directory />
Options Indexes FollowSymLinks Includes execCGI
AllowOverride none
Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:443>
ServerAdmin youremail@example.com
ServerName local.exampleA.com
DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/local.exampleA.com"
ErrorLog "logs/local.exampleA.com-error.log"
CustomLog "logs/local.exampleA.com-access.log" combined
<Directory />
Options Indexes FollowSymLinks Includes execCGI
AllowOverride none
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile "/Applications/XAMPP/xamppfiles/apache2/conf/ssl.crt/certificate.crt"
SSLCertificateKeyFile "/Applications/XAMPP/xamppfiles/apache2/conf/ssl.key/private.key"
SSLCertificateChainFile "/Applications/XAMPP/xamppfiles/apache2/conf/ssl.crt/ca_bundle.crt"
</VirtualHost>

...

主要注意 ServerName(主機名稱)、DocumentRoot(檔案根目錄) 這兩個地方,一個是你剛剛在 hosts 設定的 URL,一個則是你專案的位置,設定完之後重啟 apache 就可以依據 hosts 所設定的位址來瀏覽不同專案。