Ubuntu 16.04 設定 Apache VirtualHost

一直以來小蛙一拿到 VPS 就直接把肥胖的 apache 刪除了,早期多半使用 lighttpd,後來比較有時間後全面改成 nginx,這篇留給自己做紀錄,怎麼設定 Apache 的 VirtualHost。

朋友說他有另一個 domain 要對應到主機上,但是 dns 已經指過去了,連進去卻遇到一堆奇怪的事,例如:路徑明明指向 /var/www/html/aaaa,瀏覽器連進去卻出現指向 /var/www/html/ 的 index …,或是明明檔案就放在對的路徑,連進去卻是 404 Not Found 或是 403 Forbidden,朋友只好向小蛙求助。

But … 小蛙也不太會設定 apache 啊!大概測試了一下,不知道怎麼處理直接丟 Google,看了官方的 VirtualHost 設定的文件,立馬發現 … 自己根本完全寫錯,這樣 apache 還可以執行,真是太強大了,瞎貓碰到死耗子。

接下來小蛙記錄自己的做法,由於不確定有沒有更好的辦法,如果你剛好也不知道怎麼辦,不妨試試。

建立 VirtualHost

前往 host 設定路徑(可能不同版本或不同安裝方法會有不同路徑)

cd /etc/apache2/site-available/

這裡應該會有一個預設的 000-default.conf 及 default-ssl.conf,前者是 http 設定,後者是 https 基本設定,小蛙寫不出這些設定檔,最快的方式是直接複製一份出來改裡面的設定。

cp 000-default.conf 001-mydomain.conf  // 換成自己可以辨識的名字就好了
cp default-ssl.conf mydomain-ssl.conf
vim 001-mydomain.conf

基本內容大概會長這樣

<VirtualHost *:80>
    # 自己要對應的 domain
    ServerName mydomain.com  
    ServerAdmin webmaster@localhost
    # 自己的 web 路徑
    DocumentRoot /var/www/html/mydomain/ 
    # 這可以設定 log 等級
    #LogLevel info ssl:warn
    # log 檔案路徑
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

編輯完後存檔,這邊就不討論 ssl 的設定了。apache 的設計邏輯是 site-available 放置可以使用的網站設定,但是實際上會載入的網站則是在 site-enabled,所以剛剛設定的站台,目前並不會生效,必須再透過指令啟動。這個動作小蛙的理解是 apache 會把 site-available 裡,指定的設定檔建一份軟連結到 site-enabled 裡面,而 apache 就去啟動 site-enabled 裡面的。

a2ensite 001-mydomain.conf
Enabling site 001-mydomain.
To activate the new configuration, you need to run:
  service apache2 reload

這邊小蛙還額外做一件事,就是把 default 的設定拿掉,做這些動作後都別忘了重啟 apache 喔!

a2dissite 000-default.conf
Site 000-default disabled.
To activate the new configuration, you need to run:
  service apache2 reload

要查看目前有哪些站點是生效的除了進入上述的 site-enabled 目錄查看外,也可以直接透過以下指令

a2query -s
domain2-ssl (enabled by site administrator)
mydomain-ssl (enabled by site administrator)
002-domain2 (enabled by site administrator)
001-mydomain (enabled by site administrator)

大概就記錄到這邊了,希望能幫助到有需要的人。

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料