茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1674140 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_00006.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2018/12/21 10:35:24

多個 virtual host 共用一個 Nginx Site Config

目前在網站開發時,已有固定的開發部署流程,我們會依據 development -> staging -> production 的順序部署。在比較小型的專案,有時為了節省資源,會將多個 development 網站部署在同一台 VPS,透過給予不同的專案 domain,再配合 Nginx 做出 virtual host 來運行。

其實 Nginx 在 Config 檔案之中,可以使用一些簡易的判斷式及變數,因此雖然是多個專案使用同一台 VPS,但也只需要設定一次 Nginx Site Config 檔即可。


實作的方式如下:
首先規劃出固定的 domain 及 folder 路徑規則。

domain 規則為 XXXXX.dev.site
舉例:projectA.dev.site、projectB.dev.site

Folder 規則為 /var/www/XXXXX/
舉例:/var/www/projectA/ 、 /var/www/projectB/

接著在 Nginx 中,建立一個 Site Config,並其中有兩個地方要使用變數,分別是 server_name、root,可以參閱下面的範例。
server_name ~^(.*)\.dev\.site$;
set $project $1;
root /var/www/$project/;

如此一來,只要是從任何吻合此正規表達式的 domain 進來,Nginx 會將 domain 的第一個單字丟進變數 $1,接著再新增變數 $project = $1,第三行告知 Nginx 要去何處取得此網站檔案,檔案路徑中則包含了變數 $project。

假設是從 abc.dev.site 進來,則 $project 就會等於 abc。

透過上述的方式,即可達到只用一個 Site Config 就能運行多個不同的網站,也就不用每次新專案啟動或專案結束,又要手動管理一次 development 機的 Nginx Site Config。

其實在 server_name 可以取得不只一個變數,例如改成下面的格式,即可根據 domain 拿到兩個變數。
server_name ~^(.*)\.(.*)\.site$; set $var1 $1; set $var2 $2;
因此同樣假設是從 abc.dev.site 進來,則 $var1 會等於 abc、$var2 則會等於 dev。


2015/4/22 補充說明:
發現有人寫了一篇更好的除了 Nginx 也說明了 Apache 該如何做,補上來當參考資料。

參考資料:


原文出處:艦長,你有事嗎?: 多個 virtual host 共用一個 Nginx Site Config
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|