node.js - 如何获取向 Heroku 上运行的 Node 服务器发送 GET 的服务器的 IP?

标签 node.js heroku express

我有一个 Node 服务器,当外部源点击某个 URL 时,它会接收来自外部源的 GET 请求。 “https://appname.herokuapp.com/example

我希望只有三个特定 IP 可以访问该地址并在我的服务器上运行 GET。

app.get('/example', function (req,res) {
  console.log(req.connection.remoteAccess);
  if (req.connection.remoteAccess === 'X' || 'X' || 'X') {
    //Do stuff
  }
}

我正在尝试这个,但每次外部源访问该 URL 时我都会得到不同的 IP。他们说我得到的看起来像是内部网络 IP,而不是外部网络 IP。我这样做错了吗?我只想获取访问该地址的服务器的 IP 并确认它是 3 个经过验证的服务器之一。

编辑:那么没有办法真正安全地确认他们的 IP 吗?他们还在 req.query 中发送一个 key ,并且它位于我的 https herokuapp url 上,所以这是一个安全的设置吗?

最佳答案

正如马克所说:

app.get('/example', function (req,res) {

  var ip = req.headers['x-forwarded-for']; 
  console.log(ip);

   if (ip === 'X' || 'X' || 'X') {
     //Do stuff
   }
}

但更好的地方是在防火墙级别。

关于node.js - 如何获取向 Heroku 上运行的 Node 服务器发送 GET 的服务器的 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338832/

相关文章:

javascript - 无法将 Node.js 应用程序从 es6 转译为 es5

javascript - 读取环境变量时 JSON.parse/stringify 有什么用?

node.js - Heroku NODE_ENV 环境变量

node.js - Netlify 上的 React/Node 部署

mysql - Gem::LoadError:为数据库适配器指定了 'mysql',但未加载 gem

javascript - Express js Controller 从 api 服务获取数据并呈现 View

mysql - 将 TimeStamp 与 MySQL 一起使用,它返回服务器时间而不是本地时间

node.js - ERR_CONNECTION_RESET 将大文件上传到 Amazon S3 时出错

javascript - 如何在 JavaScript 中将字符串转换为 ASCII 格式?

javascript - Sequelize 与 Nodejs 的连接