Forzar página SSL con Nginx

forzar-ssl-nginx

Hace algunas semanas tuve un problema con un dominio virtual dentro de nginx, que al entrar con HTTP me enviaba al HTTPS de otro sitio diferente al tecleado, es decir no respetaba estar en el mismo dominio. Debo decir que tengo varios dominios con SSL en la misma dirección IP. El problema es que en cada archivo de sites-enabled de nginx, tenía dos definiciones de server para cada dominio. En una, listaba el puerto 80 y luego mandaba redirección al domino con ssl activado, es decir HTTPS y la definición donde cargaba el certificado.

La solución fue entonces quitar la segunda definición de server y dejar sólo una, añadiendo la siguiente configuración:

   if ($scheme = http) {
      return 301 https://$server_name$request_uri;
   }

de tal forma que cualquier petición hecha al sitio sin el certificado SSL, lo reenvíe de forma permanente al sitio con https. Gracias a eso no se tiene que hacer nada raro en el código de la página, simplemente el servidor lo redirecciona de forma adecuada. Ya si hacemos la prueba vemos la respuesta:

gnu$ curl -Is http://tar.mx
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 06 Nov 2017 20:26:31 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://tar.mx/
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

Como vemos, al solicitar el nombre del dominio con http me devuelve un Location al sitio que debe mostrar, eso es todo.

WebServer, nginx

por Jorge Martínez Mauricio :)

¿Algo que comentar?


Populares estos días

    Suscríbete por correo electrónico, recibirás los nuevos escritos antes que nadie y es gratis 😊

    ¿Ya conoces los foros de tar?


    tar.mx es un blog sobre tecnología y otras chunches