Ho setacciato lo stackoverflow e il gruppo express google, ma sto ancora arrivando a breve.Come posso configurare expressjs per gestire sia http che https?
Da quanto ho capito, non posso fare una delle due cose:
1) creare un'istanza di un server HTTP e un server HTTPS e impostare il due per ascoltare due porte diverse. Nelle rotte, reindirizzare la richiesta http alla porta https.
//app
var app = express.createServer();
var app_secure = express.createServer({key: key, cert: cert});
app.listen(8080);
app_secure.listen(8443);
//routes
app.get("unsecure/path", function(req, res) {
...
}
app.get("secure/path", function(req, res) {
res.redirect("https://domain" + req.path);
}
app_secure.get("secure/path", function(req, res) {
res.send("secure page");
}
2) fare quello che dice TJ Hollowaychuk: https://gist.github.com/1051583
var http = require("http");
var https = require("https");
var app = express.createServer({key: key, cert: cert});
http.createServer(app.handle.bind(app)).listen(8080);
https.createServer(app.handle.bind(app)).listen(8443);
Quando faccio 1, ci sono generalmente problemi. Tuttavia, è difficile gestire due server e credo davvero che ci dovrebbe essere un modo migliore.
Quando faccio 2, ottengo questo:
(nodo SSL) di errore: 1408A0C1: routine SSL: SSL3_GET_CLIENT_HELLO: no condiviso cifra
Naturalmente, posso solo per default l'opzione 1, ma io davvero, voglio davvero sapere perché ottengo quel "errore di cifratura condiviso" quando faccio l'opzione 2. E l'opzione 2 sarebbe la mia rotta preferita.
ho finito per usare Nginx per gestire SSL. @ Benjie Il cert è RSA. Darò il tuo suggerimento una prova nel prossimo futuro. Grazie. – ant
Puoi indicare come hai configurato nginx per gestire ssl per il nodo? Grazie – Mamsaac
Il fatto è che non hai fatto quello che ha detto l'essenza di TJ - quasi, ma non esattamente. Le opzioni https devono andare sul server https, non su express.createServer. Quindi funziona. Tuttavia, farla funzionare con un server Websocket è completamente un'altra questione :) – youurayy