Node.js サーバー (Expressjs フレームワーク) に HTTPS を実装しようとしています。署名済みの証明書とキー、およびテスト/開発用の自己署名証明書/キーがあります。
if(process.env.NODE_ENV == 'production'){
var app = module.exports = express.createServer({
key: fs.readFileSync('./ssl/nopass_server.key'),
cert: fs.readFileSync('./ssl/server.crt')
});
} else {
var app = module.exports = express.createServer({
key: fs.readFileSync('./ssl/self_signed/nopass_server.key'),
cert: fs.readFileSync('./ssl/self_signed/server.crt')
});
}
また、Heroku で SSL エンドポイントをセットアップしました。ですべてlocalhost
正常に動作し、エンドポイントも正常に動作しているように見えますが、実稼働環境 (Heroku) でアプリを実行すると、H13 アプリケーション エラーが発生します。興味深いことに (またはそうではありません)、代わりに HTTP サーバーを作成するよう Express に指示すると、var app = module.exports = express.createServer()
動作しますが、Chrome はthe page at https://mydomain.com ran insecure content from http://mydomain.com
.
本番用に Express で HTTPS サーバーを作成できない/作成すべきではないですか? 必要であれば、Heroku で動作させるために必要なものはありますか (たとえば、Heroku で正しいポートを設定することを信頼していますvar port = process.env.PORT
)? そうでない場合、ブラウザが文句を言わないように https サーバーを実行していない場合、どうすれば「安全な」コンテンツを提供できますか?
以下を使用して、https 以外のリクエストを処理しています。
app.get('*',function(req,res,next){
if(req.headers['x-forwarded-proto'] != 'https'){
res.redirect('https://mydomain.com'+req.url);
} else next();
});
これは現在、残りのルートのすぐ上にありますが、これが問題になる可能性がありますか?
私は一般的にhttpsの経験が非常に限られているため、おそらく明らかなものが欠けています。