我正在尝试让HTTPS在node.com的express.js上工作,但我无法弄清楚。
这是我的app.js
代码。
var express = require('express');
var fs = require('fs');
var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');
var credentials = {key: privateKey, cert: certificate};
var app = express.createServer(credentials);
app.get('/', function(req,res) {
res.send('hello');
});
app.listen(8000);
当我运行它时,它似乎仅响应HTTP请求。
我写了简单的node.js
基于香草的HTTPS应用程序:
var fs = require("fs"),
http = require("https");
var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();
var credentials = {key: privateKey, cert: certificate};
var server = http.createServer(credentials,function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(8000);
当我运行此应用程序时,它确实响应HTTPS请求。请注意,我认为fs结果上的toString()并不重要,因为我使用了两者的组合,但仍然没有es bueno。
编辑添加:
对于生产系统,最好使用Nginx或HAProxy将请求代理到您的nodejs应用。您可以设置nginx来处理ssl请求,而只需对您的节点app.js说http。
编辑添加(4/6/2015)
For systems on using AWS, you are better off using EC2 Elastic Load Balancers to handle SSL Termination, and allow regular HTTP traffic to your EC2 web servers. For further security, setup your security group such that only the ELB is allowed to send HTTP traffic to the EC2 instances, which will prevent external unencrypted HTTP traffic from hitting your machines.
这是我的Express 4.0的工作代码。
express 4.0与3.0和其他版本有很大的不同。
4.0中有/ bin / www文件,您将在此处添加https。
“ npm start”是启动Express 4.0服务器的标准方式。
readFileSync()函数应使用__dirname获取当前目录
而require()使用./引用当前目录。
首先,将private.key和public.cert文件放在/ bin文件夹下,它与WWW文件位于同一文件夹。