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 など) を使用する必要があります。