Cómo redirigir HTTP a HTTPS en Apache

27 feb 2021 4 min di lettura
Cómo redirigir HTTP a HTTPS en Apache
Indice dei contenuti

Introducción

Apache HTTP Server es uno de los servidores web más populares del mundo. Es un servidor HTTP multiplataforma de código abierto que alimenta un gran porcentaje de sitios web de Internet. Apache ofrece muchas funciones poderosas que se pueden ampliar mediante módulos complementarios.

Si es propietario de un sitio web o administrador de un sistema, es probable que trate con Apache 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.

Esta guía explica cómo redirigir el tráfico HTTP a través de HTTPS en Apache.

Hay varias formas de redirigir a HTTPS en Apache. Si tiene acceso de root al servidor Linux que ejecuta Apache, la forma preferida es configurar la redirección en el archivo de configuración del host virtual del dominio. De lo contrario, puede configurar la redirección en el .htaccess Algunos paneles de control, como cPanel, le permiten forzar la redirección HTTPS con unos pocos clics del mouse.

Redirigir HTTP a HTTPS usando Virtual Host

Apache Virtual Hosts define la configuración de uno o más dominios alojados en el servidor. En la directiva de host virtual, puede especificar la raíz del documento del sitio (el directorio que contiene los archivos del sitio web), crear una política de seguridad separada para cada sitio, usar diferentes certificados SSL, configurar la redirección y mucho más.

Normalmente, cuando se instala un certificado SSL en un dominio, tendrá dos directivas de host virtual 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.

En las distribuciones basadas en Red Hat como CentOS y Fedora, los archivos de hosts virtuales se almacenan en /etc/httpd/conf.d. En Debian y sus derivados, como Ubuntu, los archivos se almacenan en el /etc/apache2/sites-available.

Para redirigir un sitio web a través de HTTPS, use la Redirect como se muestra en el siguiente ejemplo:

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.example.com

 Redirect permanent /https://example.com/</VirtualHost>

 <VirtualHost *:443>
 ServerName example.com
 ServerAlias www.example.com

 Protocols h2 http:/1.1

 # SSL Configuration

 # Other Apache Configuration

 </VirtualHost>

Expliquemos el código. Estamos utilizando dos hosts virtuales, uno para HTTP y otro para la versión HTTPS del sitio.

  • VirtualHost *:80: el servidor Apache está escuchando conexiones entrantes en el puerto 80 (HTTP) para el dominio especificado.
  • VirtualHost *:443: el servidor Apache está escuchando conexiones entrantes en el puerto 443 (HTTPS) para el dominio especificado.

Las ServerName y ServerAlias especifican los nombres de dominio del host virtual. Asegúrese de reemplazarlo con su propio nombre de dominio.

La línea Redirect permanent /https://example.com/ dentro del host virtual HTTP, redirige el tráfico a la versión HTTPS del sitio.

Por lo general, también desea redirigir la versión www HTTPS del sitio a no www o viceversa. Aquí hay una configuración de ejemplo:

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.example.com

 Redirect permanent /https://example.com/</VirtualHost>

 <VirtualHost *:443>
 ServerName example.com
 ServerAlias www.example.com

 Protocols h2 http:/1.1

 <If "%{HTTP_HOST} == 'www.example.com'">
 Redirect permanent /https://example.com/</If>

 # SSL Configuration

 # Other Apache Configuration

 </VirtualHost>

El código dentro del host virtual HTTPS verifica si el encabezado de la solicitud contiene el dominio www y redirige a la versión sin www.

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

Debian y Ubuntu:

sudo systemctl reload apache2

CentOS y Fedora:

sudo systemctl reload httpd

Redirigir HTTP a HTTPS usando.htaccess

.htaccess es un archivo de configuración basado en directorios para el servidor web Apache. Este archivo se puede utilizar para definir cómo Apache sirve los archivos desde el directorio donde se encuentra el archivo y para habilitar /deshabilitar funciones adicionales.

Por lo general, el .htaccess se coloca en la raíz del dominio, pero es posible tener otros .htaccess en subdirectorios.

Este método requiere que el mod_rewrite se cargue en el servidor Apache. Este módulo se carga de forma predeterminada en la mayoría de los servidores. Si es posible, prefiera crear una redirección en el host virtual porque es más fácil y seguro.

Para redirigir todo el tráfico HTTP a través de HTTPS, abra el .htaccess y agregue el siguiente código:

RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

Esto es lo que significa el código:

  • RewriteEngine On: habilita las funciones de reescritura.
  • RewriteCond %{HTTPS} off: prueba la conexión HTTP y, si se cumple la condición, se ejecuta la siguiente línea.
  • RewriteRule ^(.*)$ https://example.com/$1 [L,R=301] - redirecciona HTTP a HTTPS con el código de estado 301 (movido permanentemente). Asegúrese de cambiar el nombre de dominio.

El siguiente ejemplo tiene una condición adicional que comprueba si la solicitud comienza con www. Úselo para obligar a todos los visitantes a usar la versión HTTPS del sitio que no es www:

RewriteCond %{HTTPS} off [OR]
 RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
 RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

Al editar el .htaccess, no es necesario reiniciar el servidor, ya que Apache lee el archivo en cada solicitud.

Conclusión

En Apache, la forma preferida de redirigir HTTP a HTTPS es configurar la redirección 301 en el host virtual del dominio.

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.