Attualmente ho un ELB che serve sia http://www.example.org che https://www.example.org .
Vorrei impostarlo in modo che qualsiasi richiesta che punti a http://www.example.org sia reindirizzata a https://www.example.org .
L'ELB invia le richieste https come richieste http, quindi utilizzando:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
non funzionerà perché le richieste fatte a https://www.example.org verranno comunque inviate alla porta 80 su nginx.
So che è possibile riscriverlo come
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Ma tutto ciò che ho letto ha detto che if
dovrebbe essere evitato a tutti i costi nella configurazione di nginx, e questo sarebbe per ogni singola richiesta. Inoltre, significa che devo impostare una speciale configurazione separata per il controllo dello stato ( come descritto qui : "... quando sei dietro un ELB, dove ELB agisce come endpoint HTTPS e invia solo traffico HTTP al tuo server, tu interrompere la capacità di rispondere con una risposta HTTP 200 OK per il controllo dello stato necessario all'ELB ").
Sto considerando di inserire il login nel codice dell'applicazione Web anziché nella configurazione di nginx (e ai fini di questa domanda supponiamo che sia un'applicazione basata su Django), ma non sono sicuro che sarebbe più sovraccarico di la if
configurazione.