web-dev-qa-db-fra.com

Redirigez tout le trafic HTTP vers HTTPS lorsque vous utilisez l'équilibreur de charge HTTP (S) sur Google Compute Engine

J'ai un équilibrage de charge HTTP/HTTPS configuré sur Google Compute Engine avec 2 règles de transfert globales (HTTP et HTTPS). Chaque règle pointe vers un service principal avec un protocole HTTP.

Je veux que toutes les demandes http://* aller à https://*.

Lorsque l'équilibreur de charge parle aux services principaux via HTTP, je ne pense pas que je puisse obtenir nginx sur le service principal pour renvoyer un 301.

J'ai essayé une douzaine de petits ajustements sur google compute et ils se retrouvent tous avec google compute renvoyant un 502.

Je suis sûr que quelqu'un d'autre a déjà mis cela en place. Tous les conseils ou pointeurs dans la bonne direction sont très appréciés.

19
Ryan Leckey

Nous avons une configuration similaire en utilisant l'équilibreur de charge HTTP/HTTPS et nous avons réussi à forcer HTTPS. Ce n'est pas possible directement à partir de l'équilibreur de charge, mais vous pouvez le configurer à partir de votre service backend. L'équilibreur de charge Google Cloud définira l'en-tête http X-Forwarded-Proto avec la valeur http ou https. Vous vérifiez cet en-tête dans votre service backend (dans notre cas, Varnish mais cela pourrait également être fait dans Nginx) et si la valeur est http, vous renvoyez un 301.

20
Lennert Kuijpers

J'ai rencontré ce problème aujourd'hui et j'ai pu le résoudre en utilisant TCP équilibrage de charge. Si vous n'avez pas besoin des options d'équilibrage de charge spécifiques HTTP/HTTPS, vous pouvez peut-être utiliser le TCP Équilibreur de charge (sans SSL) pour recevoir le trafic vers les ports 80 et 443. Pour le trafic provenant du port 80, vous pouvez renvoyer 301.

1
gselva