虛擬主機配置
1. 什麼是虛擬主機?
想像一下,你開了一家很舒適的咖啡廳。大多數客人來是為了喝咖啡 ☕,但有時候會有人點茶 🍵。與其為茶愛好者開啟一家單獨的店,你只是為茶愛好者留了一個小角落。在Web伺服器的世界裡,這種概念叫做虛擬主機。它們允許你的伺服器處理多個網站(不同的域名),而只需要一台實體伺服器。
虛擬主機的類型
- 基於IP地址 — 每個網站都有自己唯一的IP地址。這就像音樂會的VIP區域:每位有VIP票的客人都有自己的座位。
- 基於域名 — 多個網站可以共用一個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端口的請求。ServerName
和ServerAlias
: 定義網站的主域名和額外域名。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
。過程一樣:
- 創建一個新的配置檔案。
- 指定唯一的域名和根目錄。
- 啟動配置並重啟伺服器。
對於 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 的配置,這能讓你網站更安全。但這已是下一次講座的主題了!
GO TO FULL VERSION