为什么将 URL 指定为“0.0.0.0”允许我的 NestJS-fastify 应用程序部署到 Heroku?

Why does specifying the URL as '0.0.0.0' allow my NestJS-fastify app to deploy to Heroku?

当我尝试将我的 NestJS 应用程序部署到 Heroku 时,我看到了错误 Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

为什么将 url 设置为 0.0.0.0 可以正常工作?

const port = process.env.PORT || 5000;
await app.listen(port, '0.0.0.0');

上下文:

"@nestjs/common": "^8.0.0",
"@nestjs/core": "^8.0.0",
"@nestjs/platform-fastify": "^8.0.11",

127.0.0.1 - 通常也称为 localhost - 用作 Loopback mechanism 允许服务在本地计算机(即您的笔记本电脑/开发服务器)上侦听而不需要互联网甚至网络接口。

由于这个 127.0.0.1 接口是本地的并且只在 dyno 内部,Heroku 无法从用于向你的 dyno 发送请求的网络路由器连接到它;它需要一个外部的、面向互联网的网络接口。这就是 0.0.0.0 发挥作用的地方。这意味着该服务应该监听 所有 网络接口上的请求,其中包括 Heroku 希望通过其发送请求的接口。这意味着 Heroku 可以使用这些面向外部的网络接口之一来实际连接和路由到您的服务。

更多信息,check out this thread