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

标签 javascript node.js express

基于对这个问题的回答:

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/

相关文章:

validation - 使用 Backbone.js 验证时如何处理异步调用(特别是唯一性)

javascript - Mongoose 找不到所需的输出

node.js - ExpressJS中基于文件扩展名的中间件执行

css - EJS 模板中是否有 CSS 的标准模式?

javascript - Kurento WebRTC 不录音

javascript - jQuery next() 找不到查找元素或返回 console.log()

javascript - Requirejs baseUrl 仅在 bower 模块前面加上

javascript - 如何在 DOM 中添加或附加 "click"事件监听器?

javascript - v2 和 v3 Google Maps API 能否在同一页面中共存?

javascript - Node.js net data 的 toArrayBuffer 不是真正的 ArrayBuffer?