Serwer proxy z Node.js na Heroku
Próbuję zbudować serwer proxy z Node.js na Heroku, używając proxy http. Wszystko działa dobrze lokalnie, ale mam pewne problemy na 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);
Jak widać w przykładzie, ustawiam obiekt routingu. To, co mówię, jest następujące: gdy żądanie pasuje do „/ urządzeń”, skieruj żądanie do usługi urządzenia. (identyfikowane przez DEVICES_URI environment var)
W trakcie opracowywania ustawiłem
LOCALHOST = 'localhost'DEVICES_URI = 'http: // localhost: 3000'Oznacza to, że wszystkie żądania kierowane do localhost: 8000 / urządzeń są proxy dla localhost: 3000 / urządzeń, czego chcę. Wszystko działa idealnie.
Problem tkwi w produkcji. Daje mi błąd limitu czasu powtarzany wielokrotnie dla każdego żądania.
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
W produkcji vars środowiska są skonfigurowane do nazw aplikacji.
LOCALHOST = 'lelylan-api.herokuapp.com'DEVICES_URI = 'lelylan-devices.herokuapp.com/'Myślę, że się mylę, niektóre konfiguracje, ale po całym dniu wciąż nie jestem w stanie tego zrozumieć.
Aktualizacja
Kontynuowałem testy i widziałem, że proxy nie jest w stanie dotrzeć do usługi proxy, która całkowicie mnie zatrzymuje.
W trakcie opracowywania ustawiłem:
LOCALHOST = 'localhost'DEVICES_URI = 'lelylan-devices.herokuapp.com/'Jeśli zadzwonięhttp://lelylan-devices.herokuapp.com/devices wszystko dziala.
Jeśli zadzwonię na localhost: 8000 / urządzenia (co wskazuje nahttp://lelylan-devices.herokuapp.com/devices) Heroku mówi mi, że nie ma takiej aplikacji. Myślę, że problem jest w jakiś sposób w systemie routingu.
Tutaj możesz uzyskać dostęp na stroniekod źródłowy. Oto konfiguracja vars dla 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