我可以通过httpsconfigurationexpressjs通过http和其他网页来提供服务吗?

根据对这个问题的回答:

如何configurationnodejs / expressjs通过https提供页面?

我一直在试图设置相当于:

var express = require('express'); var fs = require("fs"); var crypto = require('crypto'); var app = express.createServer(); var appSecure = express.createServer(); var privateKey = fs.readFileSync('privatekey.pem').toString(); var certificate = fs.readFileSync('certificate.pem').toString(); var credentials = crypto.createCredentials({key: privateKey, cert: certificate}); appSecure.setSecure(credentials); app.get('/secretStuff', function(req,res) { //redirect to https } appSecure.get('/secretStuff', function(req, res) { //show you the secret stuff } 

这是目前版本的expressjs和节点2.4可行吗?

是的,这可以完成,它看起来像你已经有你所需要的大部分。 只需在您的app.get处理程序中发送redirect

 app.get('/secretStuff', function(req,res) { res.redirect('https://' + req.header('Host') + req.url); } 

还要确保你做了app.listen(80)appSecure.listen(443)以便在相应的端口上启动服务器。 否则,请确保使用正确的端口构buildHTTPS URL。 对于生产来说,这件事通常是在你的应用程序服务器(node.js)之外用像nginx这样的反向代理来处理的。 在nginx中这样做是微不足道的,它会让你的node.js进程以非root用户身份运行,并且不需要让客户端直接连接到node.js,而不是像nginx一样为服务实时的相互连接的TCP连接(我在这里解释Ryan Dahl自己)。

您只能通过请求进入的连接来为网页提供服务。如果请求没有通过https进入,则无法以这种方式发送响应。

所以,首先你必须监听http和https请求。 如果通过http发送的请求通过安全连接进行回复,则不要执行任何处理,而是立即将其redirect到https url。 然后当客户重新发出请求时,按正常进行处理。

如果框架使用JSGI,那么你可以使用Jack的redirect模块,否则你将不得不自己做。 详细信息位于链接,即响应代码301和位置:带有https URL的标头。