Actuellement, j'ai un ELB qui dessert à la fois http://www.example.org et https://www.example.org .
Je voudrais le configurer pour que toute demande pointant vers http://www.example.org soit redirigée vers https://www.example.org .
L'ELB envoie les requêtes https en tant que requêtes http, donc en utilisant:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
ne fonctionnera pas car les demandes adressées à https://www.example.org seront toujours envoyées au port 80 sur nginx.
Je sais qu'il est possible de le réécrire comme
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Mais tout ce que j'ai lu disait qu'il if
fallait éviter à tout prix dans la configuration de nginx, et ce serait pour chaque demande. En outre, cela signifie que je dois configurer une configuration distincte spéciale pour le contrôle de santé ( comme décrit ici : "… lorsque vous êtes derrière un ELB, où l'ELB agit en tant que point de terminaison HTTPS et n'envoie que du trafic HTTP à votre serveur, vous rompre la capacité de répondre avec une réponse HTTP 200 OK pour le contrôle de santé dont ELB a besoin ").
J'envisage de mettre la connexion dans le code de l'application Web plutôt que dans la configuration nginx (et pour les besoins de cette question, supposons que c'est une application basée sur Django), mais je ne suis pas certain que ce serait plus de surcharge que la if
configuration.