Servidor Proxy com Node.js no Heroku
Estou tentando construir um servidor proxy com o Node.js no Heroku usando http-proxy. Tudo funciona bem localmente, mas estou tendo alguns problemas em 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);
Como você pode ver no exemplo eu configurei um objeto de roteamento. O que eu digo é isto: quando uma solicitação corresponde a '/ devices', direcione a solicitação para o serviço do dispositivo. (identificado pelo DEVICES_URI environmental var)
Em desenvolvimento eu defini
LOCALHOST = 'localhost'DEVICES_URI = 'http: // localhost: 3000'Isso significa que todas as solicitações que vão para localhost: 8000 / devices são intermediadas por proxy para localhost: 3000 / devices, que é o que eu quero. Tudo funciona perfeitamente.
O problema está em produção. Isso me dá um erro de tempo limite repetido várias vezes para cada solicitação.
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
Na produção, os vars do ambiente são configurados para os nomes do aplicativo.
LOCALHOST = 'lelylan-api.herokuapp.com'DEVICES_URI = 'lelylan-devices.herokuapp.com/'Eu acho que estou errado é algumas configurações, mas depois de todo o dia eu ainda não consigo descobrir.
Atualizar
Eu continuei com meus testes e vi que o proxy não é capaz de alcançar o serviço proxy que me impede totalmente.
Em desenvolvimento eu configurei:
LOCALHOST = 'localhost'DEVICES_URI = 'lelylan-devices.herokuapp.com/'Se eu ligarhttp://lelylan-devices.herokuapp.com/devices tudo funciona bem.
Se eu chamo localhost: 8000 / devices (que aponta parahttp://lelylan-devices.herokuapp.com/devicesHeroku me diz que não existe esse aplicativo. Eu acho que o problema é de alguma forma no sistema de roteamento.
Aqui você pode acessar noCódigo fonte. Aqui a configuração vars para 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