http-proxyを使用して、HerokuでNode.jsでプロキシサーバーを構築しようとしています。ローカルではすべて正常に動作しますが、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」に一致すると、そのリクエストをデバイス サービスにルーティングします。(DEVICES_URI 環境変数によって識別されます)
開発中に私が設定した
- LOCALHOST = 'ローカルホスト'
- DEVICES_URI = 'http://localhost:3000'
これは、localhost:8000/devices に送られるすべてのリクエストが、私が望む localhost:3000/devices にプロキシされることを意味します。すべてが完璧に機能します。
問題は生産中です。リクエストごとにタイムアウトエラーが複数回繰り返されます。
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/'
いくつかの構成が間違っていると思いますが、1日経ってもまだ理解できません。
アップデート
テストを続行しましたが、プロキシがプロキシされたサービスに到達できず、完全に停止することがわかりました。
開発では、次のように設定しました。
- LOCALHOST = 'ローカルホスト'
- DEVICES_URI = 'lelylan-devices.herokuapp.com/'
http://lelylan-devices.herokuapp.com/devicesに電話すると、すべて正常に動作します。
localhost:8000/devices ( 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