使用Node.js将http重定向到https

时间:2017-04-03 15:06:44

标签: node.js http ssl https

我有一个Node.js服务器,在域上有一个活动的SSL证书。 我在这个网站上已经阅读了一些关于此的回复,但即使我与这些已经解决过的问题有关,我也会收到错误。

var express = require('express');
var https = require('https');
var http = require('http');
var path = require('path');
var fs = require('fs');
var mysql = require('mysql');

var queue = {};
var qc = {};

var app = express();

var options = {
    key: fs.readFileSync('sslcert/domain-name.key', 'utf8'),
    cert: fs.readFileSync('sslcert/domain-name.csr', 'utf8')
};

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

/* various stuff to display my website */

httpServer.listen(process.env.PORT);
httpsServer.listen(process.env.PORT);

我在控制台中收到以下错误。

_tls_common.js:67
      c.context.setCert(options.cert);
                ^

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Error (native)
    at Object.createSecureContext (_tls_common.js:67:17)
    at Server (_tls_wrap.js:754:25)
    at new Server (https.js:17:14)
    at Object.exports.createServer (https.js:37:10)
    at Object.<anonymous> (/srv/data/web/vhosts/default/server.js:35:25)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)

提前感谢您的回答!

诺尔。

2 个答案:

答案 0 :(得分:1)

cert: fs.readFileSync('sslcert/domain-name.pem', 'utf8')应该是您域名的PEM格式证书,后面是PEM格式的中间证书;不是CSR。

check_origin: [..., "//team_abc.dev.myapp.me"]

答案 1 :(得分:1)

除了Anand Bhat的答案之外,请注意,您不应该将这两个服务器绑定到同一个端口,就像您尝试这样做一样:

httpServer.listen(process.env.PORT);
httpsServer.listen(process.env.PORT);

它可能会起作用,但它可能不会如你所愿。如果你这样做:

httpServer.listen(process.env.PORT_HTTP);
httpsServer.listen(process.env.PORT_HTTPS);

其中PORT_HTTP是例如80和PORT_HTTPS是例如443,您将始终知道哪个服务器将处理哪个请求。