3

したがって、質問で説明されているように、HTTP サーバーと HTTPS サーバーの両方をホストする node.js アプリケーションがあるとします: Express.js で SSL / https を強制する方法

私のコードには次のものがあります。

// General configuration settings for production usage
app.configure(function () {
  app.set('port', process.env.PORT || 3000);
  app.set('sslport', process.env.SSLPORT || 4000);
  ...
}

http.createServer(app).listen(app.get('port'), function () {
  winston.info('Express server listening on port ' + app.get('port'));
});

var options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

https.createServer(options, app).listen(app.get('sslport'), function () {
  winston.info('Express server listening on port ' + app.get('sslport'));
});

これは、ローカルで実行されているノードサーバーに対して完全に機能します。

ただし、Azure Web サイト、Heroku、Nodejitsu などのクラウド ホスト プロバイダーにサイトを公開したいと考えています。

すべてのクラウド ホストがprocess.env.PORT値を設定しているように見えますが、1 つだけです。HTTPS サーバーが作成されると、PORT が既に使用されている/アクセスが拒否されている/などの理由で、通常はアプリがクラッシュします。

では、1 つのポートのみで動作する安全なログイン ページでサイトを作成/ホストするにはどうすればよいでしょうか!?

4

1 に答える 1

7

Heroku を使用すると、nodejs でポートを指定しなくても SSL を取得できます。必要なのは、heroku PORT 環境変数で http リクエストをリッスンすることだけです。heroku にアップロードしたら、https (443) または http (ポート 80) のいずれかを使用して、heroku アプリのアドレスを指定できます。Heroku はいずれかのサーバーにルーティングします。

同様に、EC2 でエラスティック ロード バランシングを使用する場合、ロード バランサーで SSL ターミネーションを利用し、http を使用してポート 80 でリッスンしているノード サーバーに再度ルーティングできます。http://aws.amazon.com/elasticloadbalancing

どちらの場合も、必要に応じて、自己署名証明書または適切な SSL 証明書を使用できます。

于 2013-02-07T20:57:54.657 に答える