我可以将 expressjs 配置为通过 http 提供某些页面,而通过 https 提供其他页面吗?

blu*_*lds 5 javascript node.js express

基于对这个问题的回答:

如何配置 nodejs/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
}
Run Code Online (Sandbox Code Playgroud)

这对当前版本的 expressjs 和 node 2.4 是否可行?

Pet*_*ons 3

是的,这是可以做到的,而且看起来您已经拥有了大部分所需的东西。只需在您的 app.get 处理程序中发送重定向

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

还要确保您执行类似app.listen(80)和 的操作appSecure.listen(443),在适当的端口上实际启动服务器。否则请确保使用正确的端口构建 HTTPS URL。对于生产,这件事通常是在应用程序服务器 (node.js) 之外使用反向代理(例如nginx. 在 nginx 中执行此操作很简单,这将使您的 Node.js 进程以非 root 身份运行,并且无需让客户端直接连接到 Node.js,而 Node.js 不像 nginx 那样久经沙场,可以提供实时互联网 TCP 连接(我在这里解释瑞安·达尔本人)。