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

在阅读了几个Heroku NodeJS教程之后,我了解到Heroku通过“process.env.PORT”环境variables为应用程序分配了一个随机的端口,让您的应用程序在本地和在heroku上正常工作的方式是设置端口等于

process.env.PORT || 8000

,当你在本地主机上运行的时候,8000可以被你希望你的应用程序运行的任何端口所取代。

下面是它在我的应用程序中的外观(“服务器”是http服务器,当前正在服务一个静态的HTML文件):

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

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

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

那么,为什么当我连接到heroku上的页面时,我不必在URL中指定端口29074? 我可以访问的urlhttps://limitless-brook-9339.herokuapp.com/没有指定端口号,它加载罚款。 事实上,如果我试图明确地将URL中的端口设置为:29074,则表示“此网页不可用”。

请记住,Heroku可能在幕后做了一些路由。 如果请求进来,它不一定会打你的应用程序(例如运行Express)。 这很可能是像nginx这样的东西,它可以根据主机名自己的内部路由。

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