2016-03-22 6 views
0

Wie erzwinge ich, dass eine NodeJS-Anwendung die https-URL verwendet? Ich kenne den Code und die Optionen. Was mein Problem ist, wenn ich einfach zu http (Desktop) gehe - es wird etwas Inhalt laden (aber sollte nicht), aber wenn es auf http auf Mobile geht, lädt es nicht oder leitet zu https weiter.Erzwingen von SSL in NodeJS/Bluemix

So - meine Frage:

Wenn ich nur Server erstellen https haben, kein http - ich bin mir nicht sicher, warum es auch die Nicht-https-Code geladen ... oder warum ist die Weiterleitung nicht zu https?

https.createServer(options, app).listen(8000); 

Irgendwelche Ideen?

Antwort

2

In Ordnung - hab es. Ich hatte früher http://www.tonyerwin.com/2014/09/redirecting-http-to-https-with-nodejs.html besucht, aber machte den offensichtlichen Fehler, es zu deklarieren, bevor ich app erklärte.

Einfache Lösung für mein Problem, das für mich Tage plagen wurde.

app.enable('trust proxy'); 

// Add a handler to inspect the req.secure flag (see 
// http://expressjs.com/api#req.secure). This allows us 
// to know whether the request was via http or https. 

app.use (function (req, res, next) { 
    if (req.secure) { 
      // request was via https, so do no special handling 
      next(); 
    } else { 
      // request was via http, so redirect to https 
      res.redirect('https://' + req.headers.host + req.url); 
    } 
}); 
+0

Sooooo ..... was ist die Antwort? Eine Antwort enthält Code. Zeig uns. – Rudie

+0

Dies funktioniert nicht in Bluemix-Umgebung –

1

Wenn Ihre App in Bluemix läuft, ist es eigentlich hinter einem Proxy. Der Proxy verarbeitet die Anfrage, ob http oder https, und leitet sie als http an Ihre App weiter. Deine App sollte also nur auf http hören. Wenn Sie möchten, dass der externe Benutzer immer https verwendet, können Sie in der Anforderung die Header X-Forwarded-Proto oder $WSSC überprüfen, um zu sehen, welches Protokoll ursprünglich verwendet wurde. Wenn es http ist, können Sie eine Weiterleitung an https senden. Aber auch hier endet der https-Kanal am Bluemix-Proxy und wird als http an Ihre App weitergeleitet.

+1

Hallo Marc - danke - daran werde ich jetzt arbeiten. Wir haben unsere Zertifikate auf Bluemix hochgeladen - also funktioniert alles mit einer cname-Weiterleitung ... alles muss unter SSL aus Sicherheitsgründen geladen werden. –

+2

Um Marcs Antwort ergänzen diesen Artikel: http://www.tonyerwin.com/2014/09/redirecting-http-to-https-with-nodejs.html –