如何建立 Nginx 虛擬主機(伺服器塊)
伺服器塊,在 Nginx 中通常稱為虛擬主機,允許您在一臺伺服器上託管多個網站,本文將教大家如何使用它們。
Nginx旨在處理單個伺服器和 IP 地址上的多個域,換句話說,如果您有一臺用作Web 伺服器的伺服器,並且它只分配了一個IP 地址,那麼為了在伺服器上執行多個網站或域,您可以使用 Nginx 虛擬主機。
在開始本教程之前,您需要安裝 Nginx。
什麼是虛擬主機?
這是一個Apache HTTP Server 術語,然而,Nginx 使用者也經常使用它,事實上,Nginx 的正確術語是 server block。
虛擬主機是一種在單個伺服器上託管多個域名的方法。
虛擬主機如何工作?
當您在伺服器上啟動像 Nginx 這樣的 Web 伺服器軟體時,該 Web 伺服器將自己繫結到一個或多個網路埠,通常用於埠 80 和 443 的 Web 伺服器。
現在,當計算機訪問網站時,它將通過 Internet 向伺服器傳送請求,伺服器將接收該請求。伺服器要做的第一件事是檢視請求傳送到目標埠的埠。
接下來,它將使用該目標埠來確定將該資訊轉發到哪個應用程式,這意味著您的 Web 伺服器只能有一個接收請求的應用程式。
但是,如果您想在同一 Web 伺服器上託管兩個不同的網站怎麼辦?
伺服器需要能夠判斷資料包何時進入請求網站,它需要能夠知道正在請求哪個網站,以便知道要發回哪些資訊。
無論請求哪個網站,伺服器都不能僅使用埠號和目標埠來確定客戶端嘗試訪問哪個網站,伺服器要做的就是說“我要向 Nginx 傳送這個請求”,然後 Nginx 必須從那裡決定它要發回什麼。
Nginx 有一個叫做server blocks的概念,伺服器塊實際上可以用於兩種不同的事情,它們可用於根據請求的 IP 地址為不同的網站提供服務,也可用於根據正在使用的域名為不同的網站提供服務。
因此,當您輸入網站名稱時www.example.com,當伺服器收到該名稱時,Nginx 實際上可以檢視請求的伺服器名稱的 HTTP 標頭內部,然後根據其配置的虛擬主機,決定儲存哪個目錄網站檔案,並根據伺服器名稱將正確的響應返回給客戶端。
如何建立 Nginx 虛擬主機(伺服器塊)
我們可以在兩個目錄中建立和儲存我們的虛擬主機配置檔案,它們都位於/etc/nginx目錄中,這兩個目錄的名稱是sites-available和sites-enabled。
- /etc/nginx/sites-available: 定義單個虛擬主機(網站)的目錄。請記住,Nginx 不會使用在此目錄中找到的配置檔案,除非它們連結到該 /etc/nginx/sites-enabled 目錄。
- /etc/nginx/sites-enabled:由 Nginx 主動提供服務的虛擬主機(網站)列表。
您可能想知道為什麼我們需要兩個目錄來儲存我們的虛擬主機檔案?
這樣做的主要好處是我們可以在 Nginx 伺服器上建立許多虛擬主機檔案,但我們可以根據我們的要求啟用它們。
現在,我們將建立虛擬主機檔案以在 Nginx 伺服器中託管具有多個域的多個站點,域名為 website1.com 和 website2.com。
1. 建立目錄結構
我們需要做的第一件事是為每個虛擬主機建立一個目錄來儲存不同的網站內容,我們將這些目錄放在其中 /var/www ,並以每個域名命名。
執行以下命令來建立目錄:
sudo mkdir -p /var/www/website1.com sudo mkdir -p /var/www/website2.com
Nginx 虛擬主機目錄結構
-p 上面命令中的 標誌告訴 mkdir 在此過程中建立任何必要的父目錄。
2. 為每個網站建立測試頁面
接下來,出於演示目的,讓我們index.html 在域的文件根目錄中建立一個 檔案,以便我們可以顯示一些內容。
sudo vim /var/www/website1.com/index.html
貼上以下幾行:
Welcome to Website 1!Welcome to Website 1!
現在對 website2.com 重複上述步驟。
sudo vim /var/www/website2.com/index.html
貼上以下幾行:
Welcome to Website 2!Welcome to Website 2!
3.建立Nginx虛擬主機(Server Block)
要在sites-available目錄中建立 Nginx 虛擬主機檔案,請執行以下命令:
sudo vim /etc/nginx/sites-available/website1.com
需要注意的是,Nginx 虛擬主機配置檔案可以任意命名,但通常情況下,使用域名是一個好習慣。
現在,將以下內容貼上到您的虛擬主機檔案中:
server { listen 80; server_name website1.com www.website1.com; root /var/www/website1.com; access_log /var/log/nginx/website1-access.log; error_log /var/log/nginx/website1-error.log; }
為了讓事情更清楚,讓我們分解這個語法。以下是每個引數的含義:
- listen: 指定 Nginx 伺服器在哪個埠上偵聽連線。
- server_name: 在這裡,我們匹配對我們域的請求。該指令包含我們要用於訪問我們網站的域名列表。
- root:我們儲存網站檔案的目錄的位置。
- error_log:我們儲存此虛擬主機的所有錯誤日誌的日誌檔案的完整路徑。
- access_log:我們儲存此虛擬主機的所有訪問日誌的日誌檔案的完整路徑。
現在我們可以使用我們的初始虛擬主機配置作為我們第二個檔案的基礎,只需複製它以建立一個新檔案:
sudo cp /etc/nginx/sites-available/website1.com /etc/nginx/sites-available/website2.com
開啟新檔案並調整它以匹配我們的第二個 ( website2.com) 域名:
sudo vim /etc/nginx/sites-available/website2.com server { listen 80; server_name website2.com www.website2.com; root /var/www/website2.com; access_log /var/log/nginx/website2-access.log; error_log /var/log/nginx/website2-error.log; }
4. 啟用 Nginx 虛擬主機(伺服器塊)
在測試之前我們需要做的最後一件事是啟用虛擬主機,我們可以通過建立從檔案到sites-enabled 目錄的符號連結來做到這一點 :
sudo ln -s /etc/nginx/sites-available/website1.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/website2.com /etc/nginx/sites-enabled/
如下圖所示,這些檔案現在已連結到sites-enabled目錄中。
將 Nginx 配置檔案連結到啟用站點的目錄中
在我們繼續之前,讓我們仔細檢查一下是否有任何錯別字。測試 Nginx 配置的正確語法:
sudo nginx -t
最後,如果沒有發現問題,重啟 Nginx 服務以應用更改:
sudo systemctl restart nginx
5. 測試虛擬主機(可選)
為了測試 Nginx 虛擬主機,我們首先需要將我們的域名記錄指向伺服器的 IP 地址,在我們的例子中,伺服器 IP 地址是192.168.122.101.
如果您使用的是Linux,請使用以下命令在您的臺式電腦(您將執行測試的電腦)上開啟該/etc/hosts檔案:
sudo vim /etc/hosts
並如下圖一一新增虛擬域名。
完成後儲存並關閉檔案。以這種方式進行將允許我們測試我們實際上並不擁有的域。
現在開啟瀏覽器www.website1.com和www.website2.com一一輸入,您將分別看到兩個域的索引頁面。
您已經成功地使用 Nginx 配置了兩個獨立的域。
6. 禁用 Nginx 虛擬主機(伺服器塊)
要在 Nginx 中禁用虛擬主機,我們只需要刪除我們在啟用虛擬主機檔案時建立的符號連結,例如,要禁用website2.com,我們只需要執行以下命令:
sudo rm -rf /etc/nginx/sites-enabled/website2.com
要應用更改,我們必須重新啟動 Nginx 伺服器:
sudo systemctl restart nginx
結論
在本文中,向大家介紹瞭如何在單個 Linux 伺服器上建立 Nginx 虛擬主機(伺服器塊)和託管多個域,要為另一個域建立虛擬主機,只需重複相同的步驟。