在MacOS上啟用vhost虛擬主機

我們可以在Mac上使用預載好的Apache伺服器,就可以在瀏覽器網址輸入localhost來使用。除此之外,也可以透過設定打開個人資料夾,就可以把開發完成的網站都丟進去做測試。不過個人認為彈性更大、且簡潔的作法是直接設定vhost虛擬主機,透過和hosts搭配,就可以在本機端上部署多個任意網域。

例如:

  • dev.apple
  • dev.banana
  • dev.chocolate

欸,都是吃的是有多餓!不過這樣就可以為專案分門別類惹⋯⋯望向那凌亂的桌面,現實世界跟虛擬世界都一樣亂⋯⋯正文開始。

打開虛擬主機

首先要修改設定檔,進入終端機Terminal輸入:

sudo vi /etc/apache2/httpd.conf

在大約行數#517的位置,將下列行取消註解(把#字號刪掉)

#Include /private/etc/apache2/extra/httpd-vhosts.conf

這樣以來伺服器就會引入httpd-vhosts.conf這個設定檔,以設定不同網域分別對應的根目錄路徑。

設定網域根目錄

接下來就要修改vhost的設定,打開設定檔

sudo vi /etc/apache2/extra/httpd-vhosts.conf

例如我們把想資料夾/Users/aName/foo指派為dev.com對應的根目錄的話,就可以在內文插入

<VirtualHost *:80>
    DocumentRoot "/Users/aName/foo"
    ServerName dev.com
    ServerAlias www.dev.com
</VirtualHost>

設定網域指向

我們把網域對應到根目錄之後還要設定hosts,才能讓瀏覽器在本機端找到網域對應的實體ip位址,以現在的例子就是要把dev.com指到127.0.0.1,就是localhost的IP。首先打開hosts檔案

sudo vi /etc/hosts

加入這一行

127.0.0.1 dev.com

設定完成後,重啓伺服器就搞定。

sudo apachectl restart

權限處理

第一種:看不到網頁

如果在瀏覽器網址欄輸入dev.com遇到錯誤顯示

Forbidden
You don't have permission to access / on this server.

回到vhost設定檔,在設定dev.com的區塊</VirtualHost>標籤之前加入以下設定

<Directory "/Users/aName/foo">
    Options FollowSymLinks Multiviews Indexes
    MultiviewsMatch Any
    AllowOverride All
    Require all granted
</Directory>

再重新啟動伺服器,就好。

第二種:網頁程式沒有寫入權限

如果是看到

Forbidden
You don't have permission to access /folder/ on this server.
Server unable to read htaccess file, denying access to be safe

或是這類網頁檔案沒有權限寫入資料夾的狀況

The deployment path above must be writable by PHP in order to extract the archive file.

這裡會出現許多種作法,當然我們是可以利用chown -R修改資料夾及其內所有檔案權限為_www:_www,但是發現這樣在每次修改檔案的時候都要輸入密碼,因為此時檔案的擁有者不是自己,會變成類似在修改電腦系統檔案那樣很麻煩,所以我選擇把網頁的使用者跟群組乾脆改成自己,比較一勞永逸。

回到vhost設定檔,在設定dev.com的區塊<VirtualHost>標籤之外的地方加入以下設定

<IfModule unixd_module>
    User username
    Group staff
</IfModule>

其中,username請換成個人的使用者帳號名稱。然後再重新啟動伺服器,就好。

參考資料

  1. 在MacOS上使用Apache+PHP+MySQL
  2. 如何開啟個人資料夾

後記

雖然之前已經設定過了,但OS更新似乎會把原有的設定給覆蓋掉,結果又要重新設定一次⋯⋯覺得很麻煩於是做個記錄。

還有遇到問題再補(揍飛