基于对这个问题的回答:
How do I configure nodejs/expressjs to serve pages over 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 和 node 2.4,这是可行的吗?
最佳答案
是的,这是可以做到的,看起来您已经拥有了大部分所需的东西。只需在您的 app.get 处理程序中发送重定向
app.get('/secretStuff', function(req,res) {
res.redirect('https://' + req.header('Host') + req.url);
}
还要确保您执行类似 app.listen(80)
和 appSecure.listen(443)
的操作,以在适当的端口上实际启动服务器。否则请务必使用正确的端口构建 HTTPS URL。对于生产,这件事通常是在您的应用程序服务器 (node.js) 之外使用反向代理(如 nginx
)处理的。在 nginx 中执行此操作很简单,这将使您的 node.js 进程以非 root 身份运行,并消除了让客户端直接连接到 node.js 的需要,这不像 nginx 那样经久不衰,无法提供实时 internect TCP 连接(我在这里转述 Ryan Dahl 本人)。
关于javascript - 我可以将 expressjs 配置为通过 http 提供某些页面,而通过 https 提供其他页面吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5159521/