Actualmente tengo un ELB que sirve tanto a http://www.example.org como a https://www.example.org .
Me gustaría configurarlo para que cualquier solicitud que apunte a http://www.example.org se redirija a https://www.example.org .
El ELB envía las solicitudes https como solicitudes http, por lo que utiliza:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
no funcionará porque las solicitudes realizadas a https://www.example.org aún se realizarán en el puerto 80 en nginx.
Sé que es posible reescribirlo como
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Pero todo lo que he leído dice que if
debe evitarse a toda costa dentro de la configuración de nginx, y esto sería para cada solicitud. Además, significa que tengo que configurar una configuración especial especial para la comprobación de estado ( como se describe aquí : "... cuando está detrás de un ELB, donde el ELB actúa como el punto final HTTPS y solo envía tráfico HTTP a su servidor, usted romper la capacidad de responder con una respuesta HTTP 200 OK para la comprobación de estado que necesita el ELB ").
Estoy considerando poner el inicio de sesión en el código de la aplicación web en lugar de la configuración nginx (y para los fines de esta pregunta, supongamos que es una aplicación basada en Django), pero no estoy seguro de si eso sería más costoso que En la if
configuración.