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.
load-balancing
google-compute-engine
Ryan Leckey
la source
la source
Réponses:
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.
la source
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
426
tête de mise à niveau HTTP plutôt que 301. En savoir plus: stackoverflow.com/questions/17873247/…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.
la source