express.js で HTTPS を有効にする 質問する

express.js で HTTPS を有効にする 質問する

node の express.js で HTTPS を動作させようとしていますが、わかりません。

これは私のコードですapp.js

var express = require('express');
var fs = require('fs');

var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');

var credentials = {key: privateKey, cert: certificate};


var app = express.createServer(credentials);

app.get('/', function(req,res) {
    res.send('hello');
});

app.listen(8000);

実行すると、HTTP リクエストにのみ応答するようです。

シンプルなバニラnode.jsベースの HTTPS アプリを作成しました:

var   fs = require("fs"),
      http = require("https");

var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();

var credentials = {key: privateKey, cert: certificate};

var server = http.createServer(credentials,function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
});

server.listen(8000);

そして、このアプリを実行すると、 HTTPS リクエストに応答します。fs 結果の toString() は重要ではないと思います。両方の組み合わせを使用しても、まだうまくいかないからです。


編集して追加:

実稼働システムの場合は、Nginx または HAProxy を使用して、Node.js アプリへのリクエストをプロキシする方がよいでしょう。SSL リクエストを処理するように nginx を設定し、node app.js に http で通信するだけで済みます。

編集して追加 (2015/4/6)

AWS を使用するシステムの場合、SSL ターミネーションを処理し、EC2 Web サーバーへの通常の HTTP トラフィックを許可するには、EC2 Elastic Load Balancer を使用することをお勧めします。セキュリティをさらに強化するには、ELB のみが EC2 インスタンスに HTTP トラフィックを送信できるようにセキュリティ グループを設定します。これにより、外部の暗号化されていない HTTP トラフィックがマシンに到達するのを防ぐことができます。


ベストアンサー1

express.js (バージョン 3 以降) では、次の構文を使用する必要があります。

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

// your express configuration here

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

httpServer.listen(8080);
httpsServer.listen(8443);

このようにして、ネイティブのhttp/httpsサーバーにエクスプレスミドルウェアを提供します。

アプリを 1024 未満のポートで実行する場合は、sudoコマンド (非推奨) を使用するか、リバース プロキシ (nginx、haproxy など) を使用する必要があります。

おすすめ記事