我试图建立与使用在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