与在Heroku Node.js的代理服务器(Proxy server with Node.js o

2019-06-27 07:04发布

我试图建立与使用在Heroku Node.js的HTTP代理的代理服务器。 一切工作正常本地,但我有在Heroku一些麻烦。

var http = require('http');
var httpProxy = require('http-proxy');

settings = {
  "localhost": process.env.LOCALHOST,
  "devices":   process.env.DEVICES_URI
}

var options = { router: { } }
options.router[settings.localhost + '/devices']  = settings.devices + '/devices';

var port   = process.env.PORT || 8000;
var server = httpProxy.createServer(options).listen(port);

正如你所看到的例子中我设置一个路由对象。 我想说的是这样的:当一个请求“/设备”,然后将请求路由到该设备的服务相匹配。 (由DEVICES_URI环境VAR识别)

在发展中,我设定

  • LOCALHOST = 'localhost' 的
  • DEVICES_URI =的 'http://本地主机:3000'

这意味着所有的请求去到localhost:8000 /设备代理为localhost:3000 /设备这是我想要的。 所有完美的作品。

问题是在生产。 它给了我一个超时错误重复多次为每个请求。

2012-08-23T20:18:20+00:00 heroku[router]: Error H12 (Request timeout) -> GET lelylan-api.herokuapp.com/devices dyno=web.1 queue= wait= service=30000ms status=503 bytes=0

在生产环境瓦尔被配置到应用程序的名称。

  • LOCALHOST = 'lelylan-api.herokuapp.com'
  • DEVICES_URI = 'lelylan-devices.herokuapp.com/'

我想我是错的是一些配置,但整整一天后,我还是没能弄明白。

更新

我继续我的测试,我已经看到了代理无法到达代理的业务,其完全停止了我。

在发展中,我设置:

  • LOCALHOST = 'localhost' 的
  • DEVICES_URI = 'lelylan-devices.herokuapp.com/'

如果我叫http://lelylan-devices.herokuapp.com/devices一切工作正常。

如果我把本地主机:8000 /设备(指向http://lelylan-devices.herokuapp.com/devices )Heroku的告诉我,有没有这样的一个应用程序。 我想这个问题在某种程度上是路由系统。

在这里,您可以在访问源代码 。 这里配置了瓦尔的Heroku。

NODE_ENV      => production
LOCALHOST     => lelylan-api.herokuapp.com
DEVICES_URI   => lelylan-devices.herokuapp.com
TYPES_URI     => lelylan-types.herokuapp.com
LOCATIONS_URI => lelylan-locations.herokuapp.com

Answer 1:

我终于做到了工作中使用略加修改代理按网址 。 最终代码看起来像这样和正常工作。

var httpProxy = require('http-proxy');

var port = process.env.PORT || 8000;

var routing = {
  '/devices': { port: process.env.DEVICES_PORT || 80, host: process.env.DEVICES_URI }
}

var server = httpProxy.createServer(
  require('./lib/uri-middleware')(routing)
).listen(port);

一注记。 该插件设置头HOST到目的地应用的URI。 如果你不这样做,Heroku的将不能识别应用程序,并不会找到它,因为它的内部路由系统似乎是基于主机头。



Answer 2:

我成功地使用HTTP代理在Heroku。 我在你的日志ERR注意到的第一件事是它是获得网址:GET lelylan-api.herokuapp.com/tdevices

有一个错字...而不是“/设备”这表明“/ tdevices”。 接下来,您可以确认之前,这是实际的日志消息?



文章来源: Proxy server with Node.js on Heroku