CodeGym /Adesua ahorow /Docker SELF /虛擬主機配置

虛擬主機配置

Docker SELF
等級 7 , 課堂 1
開放

虛擬主機配置

1. 什麼是虛擬主機?

想像一下,你開了一家很舒適的咖啡廳。大多數客人來是為了喝咖啡 ☕,但有時候會有人點茶 🍵。與其為茶愛好者開啟一家單獨的店,你只是為茶愛好者留了一個小角落。在Web伺服器的世界裡,這種概念叫做虛擬主機。它們允許你的伺服器處理多個網站(不同的域名),而只需要一台實體伺服器。

虛擬主機的類型

  1. 基於IP地址 — 每個網站都有自己唯一的IP地址。這就像音樂會的VIP區域:每位有VIP票的客人都有自己的座位。
  2. 基於域名 — 多個網站可以共用一個IP地址。在這裡伺服器會使用客戶請求中的主機名稱(域名)來理解需要展示哪個網站。這是對大多數項目來說更常見而且更方便的選擇。

2. 在 Nginx 裡配置虛擬主機

1. 創建新的虛擬主機

為了配置虛擬主機,我們首先需要創建一個配置檔案。這個檔案會包含伺服器如何處理特定域名請求的資訊。

為我們的網站創建一個檔案,例如 example.com

sudo nano /etc/nginx/sites-available/example.com

添加以下的配置塊:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

讓我們細看這段程式碼:

  • listen 80;: 指定伺服器將監聽 80 端口(默認用於 HTTP)。
  • server_name example.com www.example.com;: 定義伺服器應該對哪些域名作出響應。
  • root /var/www/example.com;: 指令指出網站檔案的根目錄位置。
  • index index.html;: 指定用作網站“首頁”的檔案。
  • location / { try_files $uri $uri/ =404; }: 配置請求的路由。如果找不到檔案或目錄,則返回 404 錯誤。

2. 啟用配置

現在需要“啟用”我們的虛擬主機。在 Nginx 中,這可以通過符號鏈接來完成:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

然後檢查配置中是否有錯誤:

sudo nginx -t

如果一切正常,重新啟動伺服器:

sudo systemctl reload nginx

3. 測試是否運行正常

創建一個存放網站檔案的目錄:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

添加以下簡單的 HTML 程式碼:

<h1>歡迎來到 example.com!</h1>
<p>您的 Nginx 伺服器已準備好服務了。</p>

保存檔案,然後在瀏覽器中打開:http://example.com。如果看到歡迎訊息,表示虛擬主機已經正常工作!

4.Linux 中的符號鏈接

符號鏈接(或 soft links, symlinks)是指向其他檔案或目錄的特殊檔案物件。它們的功能類似於 Windows 的“快捷方式”,允許通過替代路徑訪問目標檔案或目錄。

符號鏈接包含目標物件的路徑,而不是物件本身。如果原始檔案或目錄被移動或刪除,鏈接將成為“無效鏈接”,因為它不再指向現有的物件。

創建符號鏈接的命令:

ln -s target link_name
  • target — 原始物件的路徑。
  • link_name — 鏈接的名字。

範例:

ln -s /var/log/syslog log_link

現在可以通過 log_link 訪問檔案 /var/log/syslog

應用場景:

  • 簡化導航。
  • 為檔案創建替代訪問點。
  • 組織目錄結構。

3. 在Apache中配置虛擬主機

1. 創建配置文件

Apache使用不同的方法。這裡,虛擬主機的配置儲存於資料夾/etc/apache2/sites-available/中。為我們的網站創建一個文件:

sudo nano /etc/apache2/sites-available/example.com.conf

添加以下代碼:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

簡單說明:

  • <VirtualHost *:80>: 指定配置適用於所有發往80端口的請求。
  • ServerNameServerAlias: 定義網站的主域名和額外域名。
  • DocumentRoot: 指定網站的根目錄。
  • <Directory>: 块,用於設置特定目錄的訪問權限和行為。

2. 啟用配置

要啟用配置,使用以下命令:

sudo a2ensite example.com.conf

重啟伺服器以使更改生效:

sudo systemctl restart apache2

3. 測試運行

一樣的,創建網站的資料夾和文件:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

填入以下內容:

<h1>歡迎來到example.com的Apache網站!</h1>

保存,然後在瀏覽器中打開:http://example.com。如果你看到歡迎頁面,恭喜你,虛擬主機在Apache中配置成功了!


4. 驗證與操作多個主機

設定第二個虛擬主機

假設你想要運行第二個網站:test.com。過程一樣:

  1. 創建一個新的配置檔案。
  2. 指定唯一的域名和根目錄。
  3. 啟動配置並重啟伺服器。

對於 Nginx:

sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx

對於 Apache:

sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2

除錯問題

如果你的虛擬主機無法運行,先從檢查錯誤開始。例如:

  • 對於 Nginx:

      sudo tail -f /var/log/nginx/error.log
    
  • 對於 Apache:

      sudo tail -f /var/log/apache2/error.log
    

你也可以使用命令 curl 來直接測試網站:

curl -I http://example.com

現在你可以設定虛擬主機並運行多個網站於同一伺服器上。與此同步進行的還有 HTTPS 的配置,這能讓你網站更安全。但這已是下一次講座的主題了!

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION