一直以來小蛙一拿到 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

  1. 前往 host 設定路徑(可能不同版本或不同安裝方法會有不同路徑)
    cd /etc/apache2/site-available/
    
  2. 這裡應該會有一個預設的 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
    
  3. 基本內容大概會長這樣
    <VirtualHost *:80>
        # 自己要對應的 domain
        ServerName mydomain.com  
    
        ServerAdmin [email protected]
    
        # 自己的 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>
    
  4. 編輯完後存檔,這邊就不討論 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
    
  5. 這邊小蛙還額外做一件事,就是把 default 的設定拿掉,做這些動作後都別忘了重啟 apache 喔!
    # a2dissite 000-default.conf
    Site 000-default disabled.
    To activate the new configuration, you need to run:
      service apache2 reload
    
  6. 要查看目前有哪些站點是生效的除了進入上述的 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)
    

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

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *