2016-05-18 13 views
0

Ich versuche, alle HTTP-Reqs auf HTTPS reqs umzuleiten. Mein Backend ist mit Knoten. Hier ist meine nginx Config auf conf.d/:NGINX: HTTP-Umleitung zu HTTPS funktioniert nicht mit Knoten

upstream node { 
server 127.0.0.1:8000; 
} 
server { 
    listen  80; 
    server_name mydomain.com; 
    return 301 https://$server_name$request_uri; 
} 
server { 
    listen 443 ssl; 
    server_name mydomain.com; 
    ssl on; 
    gzip on; 
    ssl_certificate /etc/letsencrypt/live/mydomain.com/cert.pem; 
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; 
    ssl_stapling on; 
    ssl_stapling_verify on; 
    ssl_trusted_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; 
    ssl_session_timeout 5m; 

location/{ 
    proxy_pass http://node; 
    proxy_redirect off; 
} 

}

Hier ist mein Knoten config:

// Calls config file to ExpressJS instance 
var app = require('./config/express')(); 

// Calls config file to MongoDB 
require('./config/database')('mongodb://10.0.2.18/mydb'); 

http.createServer(app).listen(app.get('port'), function(){ 

console.log('HTTP listening on' + app.get('port')); 

}); 

Es funktioniert, wenn ich das HTTPS-Protokoll explizit verwenden. Wenn ich jedoch das HTTP-Protokoll verwende, funktioniert es nicht, dh es wird nicht zu HTTPS umgeleitet.

Irgendwelche Vorschläge?

+0

Für was es wert ist, wenn jemand anderes dies in derselben Situation sieht wie ich: Ich habe gerade von einer alten Version von Nginx auf die neueste aktualisiert, um HTTP2 zu verwenden und lange Geschichte kurz, meine HTTPS-Weiterleitung funktionierte nicht, weil Ich musste immer noch den alten Nginx-Prozess (n) beenden und Nginx erneut starten. – Zuko

Antwort

1

suchte ich nach einem ähnlichen Beispiel und diese Seite gefunden: https://bjornjohansen.no/redirect-to-https-with-nginx

Der einzige sinnvolle Unterschied, den ich sehe, ist darauf, dass er auf dieser Seite return 301 https://$host statt $server_name tut. Diese Frage scheint anzuzeigen, dass es besser sein könnte, den Host zu verwenden: https://serverfault.com/questions/706438/what-is-the-difference-between-nginx-variables-host-http-host-and-server-na

Ich würde auch alle server_name Einträge in der Konfiguration überprüfen.

Sie sollten in der Lage sein, die Umleitung zu sehen, indem Sie ein Werkzeug wie Charles, wireshark oder vielleicht sogar den Browser-Debugger benutzen - also sollte es möglich sein, herauszufinden, was zurückgeschickt wird. Es kann auch in der Logdatei sein.

Wenn es richtig funktioniert, wenn Sie direkt zu https:// gehen, bedeutet dies, dass die https und die Verbindung zwischen Nginx und Knoten ordnungsgemäß funktionieren; muss nur die Umleitung richtig funktionieren.

+1

Ich habe gerade den Fehler gefunden. Ich habe eine Regel auf meiner iptables-Liste hinterlassen, die Pakete von Port 80 zu 3000 umleitet. Auf diese Weise würde die Anfrage nicht einmal zu nginx kommen. Mit dem Port 443 funktionierte es, weil es keine Regel dafür gab. – Chittolina

Verwandte Themen