sails.config.*
)有关 Sails 中配置的概览,请参阅 https://sails.js.cn/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(或 443,如果您有 SSL 证书并通过
https://
提供您的网站),但根据您的应用程序部署的位置,您可能需要或可能不需要实际修改此设置。例如,如果您部署在代理后面,或部署在像 Heroku、Azure 应用服务 或 Deis 这样的 PaaS 上,您可能不需要配置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
设置,如果可以,则使用它。否则,它在开发环境中运行。
当您使用 NODE_ENV
环境变量设置为 production
启动应用程序时,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
对应用程序中所有挂钩施加的时间限制,以毫秒为单位。如果任何挂钩加载时间超过此时间,Sails 将放弃。默认为 20000
(20 秒)。
更改此设置的最常见原因是容忍缓慢的生产 Grunt 任务。例如,如果您的应用程序正在使用 uglify,并且您的 assets 文件夹中有大量客户端 JavaScript 文件,那么您可能需要 Sails 等待超过 20 秒才能编译所有这些客户端资产。有关生产资产管道的更多技巧,请参阅 概念 > 部署.
sails.config.ssl
SSL/TLS(传输层安全)对于防止潜在的中间人攻击至关重要。如果没有像 SSL/TLS 这样的协议,安全传输登录凭据和信用卡号码等 Web 基础知识将变得更加复杂和麻烦。SSL/TLS 不仅对 HTTP 请求(https://
)很重要,对于 WebSockets(通过 wss://
)也很重要。幸运的是,您只需要在一个地方担心配置 SSL 设置:sails.config.ssl
。
SSL 和负载均衡器
sails.config.ssl
设置仅在您希望您的Sails 进程管理 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'))
}