Tengo una página de registro en un subdominio como https://signup.example.com
Sólo debería ser accesible a través de HTTPS, pero me preocupa que la gente pueda tropezar con ella a través de HTTP y obtener un 404.
Mi bloque html/servidor en nginx se ve así:
html {
server {
listen 443;
server_name signup.example.com;
ssl on;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
ssl_session_timeout 30m;
location / {
root /path/to/my/rails/app/public;
index index.html;
passenger_enabled on;
}
}
}
¿Qué puedo añadir para que la gente que vaya a http://signup.example.com
sea redirigida a https://signup.example.com
? (Sé que hay plugins de Rails que pueden forzar el uso de SSL
pero esperaba evitarlo)
Según nginx pitfalls, es un poco mejor omitir la captura innecesaria, usando $request_uri
en su lugar. En ese caso, añada un signo de interrogación para evitar que nginx duplique cualquier argumento de consulta.
server {
listen 80;
server_name signup.mysite.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
Si está utilizando la nueva definición de servidor dual HTTP y HTTPS, puede utilizar lo siguiente:
server {
listen 80;
listen [::]:80;
listen 443 default ssl;
server_name www.example.com;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
Esto parece funcionar para mí y doesn't causar bucles de redirección.
Editar:
Reemplazado:
rewrite ^/(.*) https://$server_name/$1 permanent;
con la línea de reescritura de Pratik'.