Ich habe einen HTTP / HTTPS-Lastenausgleich in Google Compute Engine mit zwei globalen Weiterleitungsregeln (HTTP und HTTPS) eingerichtet. Jede Regel verweist auf einen Back-End-Dienst mit einem HTTP-Protokoll.
Ich möchte, dass alle Anfragen http://*
an gehen https://*
.
Da der Load Balancer über HTTP mit den Back-End-Diensten kommuniziert, glaube ich nicht, dass ich Nginx über den Back-End-Dienst zum Zurücksenden von A veranlassen kann 301
.
Ich habe ein Dutzend kleiner Optimierungen bei Google Compute ausprobiert, und am Ende gibt Google Compute a zurück 502
.
Ich bin sicher, jemand anderes hat das schon einmal eingerichtet. Alle Tipps oder Hinweise in die richtige Richtung werden sehr geschätzt.
load-balancing
google-compute-engine
Ryan Leckey
quelle
quelle
Antworten:
Wir haben eine ähnliche Konfiguration mit dem HTTP / HTTPS-Load-Balancer und es ist uns gelungen, HTTPS zu erzwingen. Es ist nicht direkt über den Load Balancer möglich, aber Sie können es über Ihren Backend-Service einrichten. Der Google Cloud Load Balancer setzt den X-Forwarded-Proto-HTTP-Header entweder auf den Wert http oder auf https. Sie überprüfen diesen Header in Ihrem Back-End-Service (in unserem Fall Varnish, dies könnte aber auch in Nginx geschehen) und wenn der Wert http ist, senden Sie eine 301 zurück.
quelle
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
426
Upgrade-Header anstelle von 301 verwenden. Weitere InformationenIch war heute mit diesem Problem konfrontiert und konnte es mithilfe des TCP-Lastenausgleichs beheben. Wenn Sie die HTTP / HTTPS-spezifischen Lastausgleichsoptionen nicht benötigen, können Sie möglicherweise den TCP-Lastausgleich (kein SSL) verwenden, um Datenverkehr zu Port 80 und 443 zu empfangen. Für Datenverkehr von Port 80 können Sie 301 zurücksenden.
quelle