Descripción del problema
Desde el uso a gran escala de HTTPS, todo el acceso HTTP debe redirigirse a sitios HTTPS. De lo contrario, el cliente solo ingresará el nombre de dominio y muchos navegadores usan el protocolo HTTP de forma predeterminada. Si no brindamos acceso HTTP y no redireccionamos, el cliente verá una página en blanco (no disponible) y el cliente pensará que nuestro sitio tiene El problema, después de todo, ¿dónde sabe el cliente qué es HTTP y qué es HTTPS?
Por lo tanto, necesitamos redirigir las solicitudes HTTP a sitios HTTPS. Por supuesto, este tipo de redirección es generalmente para solicitudes GET, y no es necesario que sea complicado redirigir solicitudes HTTP Post a solicitudes HTTPS Post, por lo que no discutimos estos problemas y hablaremos de ellos más adelante.
Esta nota registrará: En Nginx, cómo redirigir solicitudes HTTP a solicitudes HTTPS y escribir prácticas comunes y convenientes.
solución
Plan uno, plan convencional
La solución convencional es agregar redireccionamientos para cada sitio, y la configuración es aproximadamente la siguiente estructura:
servidor { escuchar 80; nombre_servidor http.example.com; reescribir ^ (. *) https: // $ nombre_servidor $ 1 permanente; } servidor { nombre_servidor https.example.com; escuchar 443 ssl; ssl_certificate / ruta / a / pem; ssl_certificate_key / ruta / a / clave; ubicación / {} }
Sin embargo, el mayor problema con este método es: para agregar redireccionamientos HTTP para cada nombre de dominio (como la configuración del primer servidor {}), ¿hay alguna forma de "hacerlo bien de una vez por todas"? Eso debe tener:
Solución dos, maneje todas las redirecciones HTTP
A través de la siguiente configuración, no es necesario agregar la configuración HTTP para el nombre de dominio en el futuro.
servidor { escucha 80 servidor_predeterminado ; nombre del servidor _; return 301 https: // $ host $ request_uri; }
Explicación: Debido a la existencia de default_server, esos nombres de dominio HTTP no configurados coincidirán con el bloque del servidor {}, y luego el retorno 301 será redirigido al sitio HTTPS correspondiente.
referencias
Módulo ngx_http_rewrite_module
rewrite - ¿Cuál es la diferencia entre las variables de Nginx $ host, $ http_host y $ server_name? - Error del servidor
Redirigir HTTP a HTTPS en Nginx | Servidores para piratas informáticos