sails.config.*
)關於 Sails 中設定的概念性概述,請參閱 https://sails.dev.org.tw/documentation/concepts/Configuration。
本頁面是關於其他地方不適合提及的各種設定主題的快速參考,也就是 sails.config
物件上的頂層屬性。這些屬性中的許多屬性最好在每個環境的基礎上設定,或在您的 config/local.js 中設定。若要為您的應用程式全域設定它們,請在 config
資料夾中建立一個新檔案 (例如 config/misc.js
) 並將它們新增至該處。
sails.config.port
port
設定決定您的 Sails 應用程式將使用哪個 TCP 埠 來監聽傳入的請求。埠是一個 傳輸層 概念,旨在允許多個不同的網路應用程式在單一電腦上同時執行。
預設情況下,如果已設定,Sails 會使用您的應用程式中設定的埠 (sails.config.port
)。如果未設定,它會檢查是否已設定 PORT
環境變數,並在可能的情況下使用該變數。否則,它會回退到埠 1337。
在生產環境中,您可能希望 Sails 監聽埠 80 (或者如果您有 SSL 憑證並透過
https://
提供網站服務,則為 443),但根據您的應用程式部署位置,您可能不需要實際修改此設定。例如,如果您部署在代理伺服器後方,或部署到 PaaS (如 Heroku、Azure App Service 或 Deis),您可能不需要設定sails.config.port
,因為在大多數情況下,這會自動處理。如需更多關於在生產環境中部署、擴展和維護 Sails 的指南和技巧,請參閱 概念 > 部署。
sails.config.explicitHost
預設情況下,Sails 會假設 localhost
作為將監聽傳入請求的主機。這在您遇到的大多數託管環境中都適用,但在某些情況下 (以 OpenShift 為例),您需要明確宣告 Sails 應用程式的主機名稱。設定 explicitHost
會告知 Sails 在該主機而不是 localhost
上監聽請求。
sails.config.environment
您的 Sails 應用程式的執行時「環境」通常是 development
或 production
。
在開發環境中,您的 Sails 應用程式會盡力協助您 (例如,您將收到更具描述性的錯誤和偵錯輸出)。
在生產環境中,Sails 會自行設定 (及其相依性) 以優化效能。您應該始終在將應用程式部署到伺服器之前將其置於生產模式;這有助於確保您的 Sails 應用程式保持穩定、高效能和可擴展性。
預設情況下,Sails 使用 NODE_ENV
環境變數來判斷其環境。如果未設定 NODE_ENV
,Sails 會查看您是否提供了 sails.config.environment
設定,並在可能的情況下使用它。否則,它會在開發環境中執行。
當您使用設定為 production
的 NODE_ENV
環境變數啟動應用程式時,Sails 也會自動將 sails.config.environment
設定為 production
。這是切換到生產模式的建議方式。我們通常不建議手動設定 sails.config.environment
,因為 Sails 的某些相依性依賴 NODE_ENV
環境變數,而且它會由大多數 Sails/Node.js 託管服務自動設定。
如果您嘗試在生產環境中啟動 Sails 應用程式,但未將 NODE_ENV
設定為 production
(例如,透過執行 sails lift --prod
),Sails 會自動為您將 NODE_ENV
設定為 production
。如果您嘗試在生產環境中啟動 Sails 應用程式,同時 NODE_ENV
設定為不同的值 (例如 NODE_ENV=development sails lift --prod
),則應用程式將無法啟動。
如需更多關於為生產環境設定 Sails 應用程式的背景資訊,請參閱 概念 > 部署。
請注意,將 sails.config.environment
設定為完全不同的值 (例如 "staging"),同時仍然設定 NODE_ENV=production
是完全有效的。這會導致 Sails 載入不同的環境特定設定檔 (例如 config/env/staging.js
) 和 Grunt 任務 (例如 tasks/register/staging.js
),同時在其他方面仍然像在生產環境中一樣運作。
sails.config.hookTimeout
對應用程式中所有 Hook 施加的時間限制 (以毫秒為單位)。如果任何 Hook 的載入時間超過此限制,Sails 將會放棄。預設值為 20000
(20 秒)。
變更此設定最常見的原因是容忍緩慢的生產環境 Grunt 任務。例如,如果您的應用程式正在使用 uglify,並且您的 assets 資料夾中有大量用戶端 JavaScript 檔案,則您可能需要 Sails 等待超過 20 秒才能編譯所有這些用戶端資源。如需更多關於生產資源管線的技巧,請參閱 概念 > 部署。
sails.config.ssl
SSL/TLS (傳輸層安全性) 對於防止潛在的中間人攻擊至關重要。如果沒有像 SSL/TLS 這樣的協定,像安全傳輸登入憑證和信用卡號碼這樣的網路基礎知識將會變得更加複雜和麻煩。SSL/TLS 不僅對 HTTP 請求 (https://
) 很重要,對於 WebSockets (透過 wss://
) 也是必要的。幸運的是,您只需要擔心在一個地方設定 SSL 設定:sails.config.ssl
。
SSL 和負載平衡器
只有當您希望您的 Sails 處理程序 管理 SSL 時,
sails.config.ssl
設定才相關。情況並非總是如此。例如,如果您預期您的 Sails 應用程式隨著時間推移會獲得更多流量,則需要擴展到多個伺服器,這就需要負載平衡器。在大多數情況下,為了效能和簡化,最好在您的負載平衡器上終止 SSL。如果您這樣做,那麼由於 SSL/TLS 將在封包到達您的 Sails 應用程式之前就已處理完畢,因此您將完全不需要使用sails.config.ssl
設定。(如果您正在使用像 Heroku 這樣的 PaaS,或幾乎任何其他具有內建負載平衡器的主機,情況也是如此。)如果您確信此設定適用於您的應用程式,請繼續閱讀以下更多詳細資訊。
使用 sails.config.ssl
來設定基本 SSL 伺服器選項,或指示您將在 sails.config.http.serverOptions 中指定更進階的選項。
如果您指定字典,它應該同時包含 key
和 cert
鍵,或 pfx
鍵。這些選項的存在向 Sails 指示您的應用程式應該使用 HTTPS 伺服器啟動。如果您的應用程式需要更複雜的 SSL 設定 (例如透過使用 SNICallback),請將 sails.config.ssl
設定為 true
,並在 sails.config.http.serverOptions 中指定您的進階選項。
對於此範例,我們假設您在專案中建立了一個資料夾 config/ssl/
,並將您的憑證/金鑰檔案傾印到其中。然後,在您的其中一個設定檔中,包含以下內容
// Assuming this is in `config/env/production.js`, and your folder of SSL cert/key files is in `config/ssl/`:
ssl: {
ca: require('fs').readFileSync(require('path').resolve(__dirname,'../ssl/my-gd-bundle.crt')),
key: require('fs').readFileSync(require('path').resolve(__dirname,'../ssl/my-ssl.key')),
cert: require('fs').readFileSync(require('path').resolve(__dirname,'../ssl/my-ssl.crt'))
}