El servidor Apache HTTP es uno de los servidores web más populares del mundo. Es un servidor HTTP de código abierto y multiplataforma que alimenta un gran porcentaje de los sitios web de Internet. Apache proporciona muchas funciones potentes que se pueden ampliar a través de módulos adicionales.

Si es propietario de un sitio web o administrador del sistema, lo más probable es que esté tratando 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 utiliza TLS/SSL para cifrar la comunicación entre el cliente y el servidor.

Hay muchas ventajas de usar HTTPS sobre HTTP, como:

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

Esta guía cubre cómo redirigir el tráfico HTTP a HTTPS en Apache.

Hay varias formas de redirigir a HTTPS en Apache. Si tiene acceso raíz al servidor Linux donde se 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 .htaccessarchivo del dominio.
Algunos paneles de control, como cPanel , le permiten forzar la redirección de HTTPS con unos pocos clics del mouse.

Redirigir HTTP a HTTPS utilizando 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.

Por lo general, 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 host virtual se almacenan en formato /etc/httpd/conf.dMientras que en Debian y sus derivados como Ubuntu, los archivos se almacenan en el /etc/apache2/sites-availabledirectorio.

Para redirigir un sitio web a HTTPS, use la Redirectdirectiva 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. Usamos dos directivas de host virtual, una para HTTP y otra para la versión HTTPS del sitio.

  • VirtualHost *:80- El servidor Apache escucha las conexiones entrantes en el puerto 80 (HTTP) para el dominio especificado.
  • VirtualHost *:443- El servidor Apache escucha las conexiones entrantes en el puerto 443 (HTTPS) para el dominio especificado.

Las directivas ServerNameServerAliasespecifican los nombres de dominio del host virtual. Asegúrese de reemplazarlo con su nombre de dominio.

La línea resaltada, 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 HTTPS www del sitio a la que no es 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 (las líneas resaltadas) verifica si el encabezado de la solicitud contiene el dominio www y redirige a la versión que no es www.

Cada vez que realice cambios en los archivos de configuración, debe reiniciar o recargar el servicio de 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

.htaccesses un archivo de configuración por directorio para el servidor web Apache. Este archivo se puede usar para definir cómo Apache sirve archivos desde el directorio donde se coloca el archivo y para habilitar/deshabilitar funciones adicionales.

Por lo general, el .htaccessarchivo se coloca en el directorio raíz del dominio, pero puede tener otros .htaccessarchivos en los subdirectorios.

Este método requiere que el mod_rewritemódulo 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 simple y seguro.

Para redirigir todo el tráfico HTTP a HTTPS, abra el .htaccessarchivo raíz y agréguele 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 capacidades de reescritura.
  • RewriteCond %{HTTPS} off- comprueba 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]- redirigir 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 verifica si la solicitud comienza con wwwÚselo para obligar a todos los visitantes a usar la versión HTTPS no www del sitio:

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

Al editar un .htaccessarchivo, no necesita reiniciar el servidor porque 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.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.