[解決済み] express.js で HTTPS を有効にする
質問
express.js for node で 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()は重要ではないと思います。私は両方の組み合わせを使用しましたが、それでもno es buenoでした。
EDIT TO ADD:
本番システムでは、NginxやHAProxyを使って、nodejsアプリへのリクエストをプロキシするのがよいでしょう。nginxをセットアップしてsslリクエストを処理し、node app.jsにhttpで話しかけるだけです。
edit to add (4/6/2015)
AWSを使用するシステムの場合、EC2 Elastic Load BalancerでSSL Terminationを処理し、EC2のWebサーバーに通常のHTTPトラフィックを許可する方がよいでしょう。さらに、セキュリティグループを設定して、ELBだけがEC2インスタンスにHTTPトラフィックを送信できるようにすれば、暗号化されていない外部のHTTPトラフィックがマシンに到達するのを防ぐことができる。
解決するには?
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) を使用してください。
関連
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] HTTPSのURLは暗号化されていますか?
-
[解決済み] HTTPSヘッダーは暗号化されていますか?
-
[解決済み] Express.js - app.listen vs server.listen
-
[解決済み] Express.jsとは?
-
[解決済み】Node.js / Express.js - app.routerはどのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] NodeJsのSequelizeでautoIncrementはどのように動作するのですか?
-
[解決済み] バルク更新を行う。
-
[解決済み] MongoNetworkError: 最初の接続でサーバー [localhost:27017] への接続に失敗 [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] 。
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] Node.jsでHTTPSサーバーを作成する方法とは?