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.
Réponses:
Si cela fonctionne correctement, n'ayez pas peur. http://wiki.nginx.org/IfIsEvil
la source
location {}
, à laserver {}
place. (Mais s'il vous plaît, faites-moi savoir si c'est incorrect!)Configuration de NGINX
la source
HTTP:1443
. Il rejette leHTTP:80
car la redirection 301.Cette solution utilise une logique conditionnelle, mais comme le suggère la réponse acceptée, je pense également que c'est correct. Réf: /programming/4833238/nginx-conf-redirect-multiple-conditions
En outre, cela ne nécessite pas d'ouvrir de ports supplémentaires dans les paramètres de sécurité aws pour l'image. Vous pouvez terminer ssl dans AWS LB et acheminer le trafic https vers le port http 80 sur votre instance.
Dans cet exemple, le contrôle d'intégrité LB atteint / health sur le port 80 qui est acheminé vers le serveur d'applications, de sorte que le contrôle d'intégrité valide à la fois nginx et votre application respirent.
la source
Vous pouvez maintenant créer un nouvel écouteur dans les paramètres d'AWS Load Balancer qui redirige le port HTTP 80 vers le port HTTPS 443. Vous n'avez donc plus besoin de toucher la configuration nginx / apache.
la source