Tôi đang cố gắng để HTTPS hoạt động trên express.js cho nút và tôi không thể tìm ra.
Đây là app.js
mã của tôi .
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);
Khi tôi chạy nó, nó dường như chỉ đáp ứng các yêu cầu HTTP.
Tôi đã viết node.js
ứng dụng HTTPS dựa trên vanilla đơn giản :
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);
Và khi tôi chạy ứng dụng này, nó sẽ đáp ứng các yêu cầu HTTPS. Lưu ý rằng tôi không nghĩ toString () trên kết quả fs có vấn đề, vì tôi đã sử dụng kết hợp cả hai và vẫn không có es bueno.
CHỈNH SỬA THÊM:
Đối với các hệ thống sản xuất, có lẽ bạn nên sử dụng Nginx hoặc HAProxy cho các yêu cầu proxy đến ứng dụng nodejs của bạn. Bạn có thể thiết lập nginx để xử lý các yêu cầu ssl và chỉ cần nói http với nút app.js.
CHỈNH SỬA THÊM (4/6/2015)
Đối với các hệ thống sử dụng AWS, tốt hơn hết bạn nên sử dụng Bộ cân bằng tải đàn hồi EC2 để xử lý Chấm dứt SSL và cho phép lưu lượng HTTP thường xuyên đến các máy chủ web EC2 của bạn. Để bảo mật hơn, hãy thiết lập nhóm bảo mật của bạn sao cho chỉ ELB mới được phép gửi lưu lượng HTTP đến các phiên bản EC2, điều này sẽ ngăn lưu lượng HTTP không được mã hóa bên ngoài tấn công vào máy của bạn.