heroku 如何将请求路由到正确的端口?

how does heroku route requests to the correct port?

阅读了几篇 Heroku NodeJS 教程后,我了解到 Heroku 通过 "process.env.PORT" 环境变量为您的应用程序分配一个随机端口,以及让您的应用程序在本地和其他平台上运行的正确方法heroku就是设置端口等于

process.env.PORT || 8000

,当您在本地主机上 运行 时,可以将 8000 替换为您希望应用 运行 打开的任何端口。

这是它在我的应用程序中的样子("server" 是 http 服务器,当前服务于静态 HTML 文件):

server.listen(process.env.PORT || 8000)

当我 运行 heroku 上的应用程序并检查日志时,我会看到 process.env.PORT 被分配了一个端口号...之前的部署是 29074。

当我在本地 运行 应用程序时,我通过 url http://localhost:8000 连接。如果我不包括端口号,则页面不会加载(无法找到页面)。

那么,为什么我连接到heroku 上的页面时,不必在URL 中指定端口29074?我可以在不指定端口号的情况下访问 url https://limitless-brook-9339.herokuapp.com/ 并且加载正常。事实上,如果我尝试将 URL 中的端口显式设置为 :29074,它会显示 "This webpage is not available".

请记住,Heroku 可能正在幕后进行一些路由。如果收到请求,它不一定会影响您的应用程序(例如 运行 Express)。它很可能会攻击像 nginx 这样的东西,它可以根据主机名进行自己的内部路由。

语句 server.listen(process.env.PORT || 8000) 正在指定端口 - 它是 process.env.PORT 的值(通过在命令行上设置 PORT=80(或 PORT=443)指定)或使用端口默认为 8000。