ฉันพยายามทำให้ HTTPS ทำงานบน 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 โปรดทราบว่าฉันไม่คิดว่า toString () ในผลลัพธ์ของ fs มีความสำคัญเนื่องจากฉันใช้ทั้งสองอย่างร่วมกันและยังไม่มี es bueno
แก้ไขเพื่อเพิ่ม:
สำหรับระบบที่ใช้งานจริงคุณควรใช้ Nginx หรือ HAProxy เพื่อขอพร็อกซีไปยังแอป nodejs ของคุณ คุณสามารถตั้งค่า nginx เพื่อจัดการการร้องขอ ssl และเพียงแค่พูด http กับโหนด app.js.
แก้ไขเพื่อเพิ่ม (4/6/2015)
สำหรับระบบที่ใช้ AWS คุณควรใช้ EC2 Elastic Load Balancer เพื่อจัดการกับการเลิกจ้าง SSL และให้การรับส่งข้อมูล HTTP ปกติไปยังเว็บเซิร์ฟเวอร์ EC2 ของคุณ เพื่อความปลอดภัยเพิ่มเติมให้ตั้งค่ากลุ่มความปลอดภัยของคุณเพื่อให้เฉพาะ ELB เท่านั้นที่ได้รับอนุญาตให้ส่งทราฟฟิก HTTP ไปยังอินสแตนซ์ EC2 ซึ่งจะป้องกันการรับส่งข้อมูล HTTP ภายนอกที่ไม่เข้ารหัสจากการกดปุ่มเครื่องของคุณ