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

18

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 requêtes http://*pour aller à https://*.

Pendant que l'équilibreur de charge parle aux services principaux via HTTP, je ne pense pas pouvoir 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 fichier 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.

Ryan Leckey
la source
La redirection HTTP vers HTTPS (à l'aide de SSL) n'est actuellement pas prise en charge via l'équilibreur de charge HTTP / HTTPS. La redirection doit être configurée sur votre serveur Web (apache, nginx etc.). Cela dit, n'hésitez pas à déposer une demande de fonctionnalité à ce sujet sur le traqueur de problèmes publics de Compute Engine ( code.google.com/p/google-compute-engine/issues/list ).
Faizan
Je vous remercie; a ouvert un problème: code.google.com/p/google-compute-engine/issues/…
Ryan Leckey
Ok parfait, j'ai transmis la demande de fonctionnalité à l'ingénierie.
Faizan
@Faizan - existe-t-il un calendrier lorsque cette fonctionnalité sera disponible? Cela fait environ 2 ans que la fonctionnalité a été demandée. La solution de contournement est maladroite.
talonx
Le nouveau lien pour cette demande est issuetracker.google.com/issues/35904733 (bien que l'ancien redirige toujours).
Daniel Compton

Réponses:

19

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.

Lennert Kuijpers
la source
8
Merci! Pour la postérité: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Ryan Leckey
Vous devez utiliser l'en- 426tête de mise à niveau HTTP plutôt que 301. En savoir plus: stackoverflow.com/questions/17873247/…
Vikram Tiwari
3
Je ne suis pas d'accord Vikram, vous devez utiliser un 301 à des fins de référencement. Si vous renvoyez un code de famille 4xx, votre pagerank ne passera pas des liens pointant vers l'ancien http vers https. 301 est le code attendu, du moins si vous vous souciez du référencement sur votre site.
cyrrill
1
@VikramTiwari, la réponse de l'article indique en fait: "Il ne s'agit même pas de passer de http: // à https: // du tout"
Rambatino
1

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

gselva
la source
1
tcp load balancing n'est pas autorisé pour le port 80 doc > TCP Proxy Load Balancing prend en charge les ports suivants: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo