Cómo configurar la redirección de tráfico HTTP a HTTPS con Nginx

1 mar 2021 3 min di lettura
Cómo configurar la redirección de tráfico HTTP a HTTPS con Nginx
Indice dei contenuti

Introducción

En esta guía, explicaremos cómo redirigir el tráfico HTTP a través de HTTPS en Nginx.

Nginx, pronunciado como "motor x", es un servidor proxy inverso y HTTP de código abierto y de alto rendimiento, responsable de administrar la carga de algunos de los sitios más grandes de Internet.

Si es desarrollador o administrador de sistemas, es probable que trate con Nginx de forma regular. Una de las tareas más comunes que probablemente realizará es redirigir el tráfico HTTP a la versión segura (HTTPS) de su sitio web.

A diferencia de HTTP, donde las solicitudes y respuestas se envían y devuelven en texto sin formato, HTTPS usa TLS /SSL para cifrar la comunicación entre el cliente y el servidor.

Los beneficios de usar HTTPS sobre HTTP son numerosos:

  • Todos los datos están encriptados en ambas direcciones. Como resultado, la información confidencial no se puede leer si se intercepta.
  • Google Chrome y todos los demás navegadores populares marcarán su sitio web como seguro.
  • HTTPS le permite utilizar el protocolo HTTP /2, que mejora significativamente el rendimiento del sitio.
  • Google prefiere los sitios web HTTPS. Su sitio se clasificará mejor cuando se ofrezca a través de HTTPS.

El método preferido para redirigir HTTP a HTTPS en Nginx es configurar un bloque de servidor separado para cada versión del sitio. Debe evitar redirigir el tráfico mediante la directiva if, ya que puede provocar un comportamiento impredecible del servidor.

Redirigir HTTP a HTTPS por sitio

Normalmente, cuando se instala un certificado SSL en un dominio, tendrá dos bloques de servidor para ese dominio. El primero para la versión HTTP del sitio en el puerto 80 y el otro para la versión HTTPS en el puerto 443.

Para redirigir un único sitio web a través de HTTPS, abra el archivo de configuración del dominio y realice los siguientes cambios:

server {
 listen 80;
 server_name noviello.it www.noviello.it;
 return 301 https://noviello.it$request_uri;
 }

Repasemos el código línea por línea:

  • listen 80: el bloque del servidor escuchará las conexiones entrantes en el puerto 80 para el dominio especificado.
  • server_name noviello.it www.noviello.it - Especifica los nombres de dominio del bloque del servidor. Asegúrese de reemplazarlo con su propio nombre de dominio.
  • return 301 https://noviello.it$request_uri - Redirigir el tráfico a la versión HTTPS del sitio. La $request_uri es el URI de la solicitud original completa, incluidos los argumentos.

Por lo general, también querrá redirigir la versión www del sitio HTTPS a no www o viceversa. La forma recomendada de redireccionar es crear un bloque de servidor separado para las versiones con www y sin www.

Por ejemplo, para redirigir las solicitudes HTTPS de www a no www, utilice la siguiente configuración:

server {
 listen 80;
 server_name noviello.it www.noviello.it;
 return 301 https://noviello.com$request_uri;
 }

 server {
 listen 443 ssl http2;
 server_name www.noviello.it;

 #... other code

 return 301 https://noviello.it$request_uri;
 }

 server {
 listen 443 ssl http2;
 server_name noviello.it;

 #... other code
 }

Siempre que realice cambios en los archivos de configuración, debe reiniciar o volver a cargar el servicio Nginx para que los cambios surtan efecto:

sudo systemctl reload nginx

Redirigir todos los sitios a HTTPS

Si todos los sitios web alojados en el servidor están configurados para usar HTTPS y no desea crear un bloque de servidor HTTP separado para cada sitio, puede crear un bloque de servidor HTTP todo en uno. Este bloque redirigirá todas las solicitudes HTTP a los bloques HTTPS adecuados.

Para crear un único bloque HTTP general que redirija a los visitantes a la versión HTTPS del sitio, abra el archivo de configuración de Nginx y realice los siguientes cambios:

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name _;
 return 301 https://$host$request_uri;
 }

Repasemos el código línea por línea:

  • listen 80 default_server: establece este bloque de servidor como el bloque de creación (catch-all) para todos los dominios no coincidentes.
  • server_name _ - _ es un nombre de dominio no válido que nunca coincide con ningún nombre de dominio real.
  • return 301 https://$host$request_uri - Redirige el tráfico al bloque de servidor HTTPS correspondiente con el código de estado 301 (movido permanentemente). La $host contiene el nombre de dominio de la solicitud.

Por ejemplo, si el visitante abre http://example.com/page2 en el navegador, Nginx redirigirá la solicitud a https://example.com/page2.

Si es posible, prefiera crear una redirección por dominio en lugar de una redirección global de HTTP a HTTPS.

Conclusión

En Nginx, la forma preferida de redirigir HTTP a HTTPS es crear un bloque de servidor separado y realizar la redirección 301.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.