node.js - heroku 如何将请求路由到正确的端口?

标签 node.js heroku

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

process.env.PORT || 8000

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

这是它在我的应用程序中的样子(“服务器”是 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,它会显示“此网页不可用”。

最佳答案

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

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

关于node.js - heroku 如何将请求路由到正确的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143484/

相关文章:

javascript - 如何在 express、couchDB 和 node.js 中使用 session

node.js - 如何匹配mongodb中的其他集合数据

javascript - 为什么 console.log() 在 createServer() 中输出两次?

javascript - 逐行读取文件,解析它们并将它们插入到node js中的mongo中

heroku - 将自定义维护页面加载到 Heroku

python - heroku 上的 Gunicorn 'ImportError: No module named app.wsgiapp'

node.js - 如何下载电子邮件附件 Node js

node.js - 在 MongoDB 中查询具有非空数组交集的文档

ruby-on-rails - 初始推送大型 repo 的替代方法

ruby-on-rails - 使用 Heroku + SendGrid 时是否需要提供 "from"电子邮件地址?