Redirigir HTTP a HTTPS en Beanstalk sin LoadBalancer

La forma más común de hacer las redirecciones de HTTP a HTTPS en entornos en producción pasa por añadir una regla en el ELB o ALB y de esta forma todo nuestro tráfico es redirigido a nuestra aplicación sin tener que configurar nada dentro de nuestro container o instancia.

¿Pero y si no tenemos ELB/ALB? En mi caso, solo tengo una instancia para este blog porque no tiene sentido asumir el coste del balanceador y dado que muchos posts en google hablan sobre como hacerlo con ELB/ALB vamos a ver como se hace si no disponemos de esta pieza.

Habilitar HTTPS dentro de la aplicación

En mi caso utilizo AWS Beanstalk para poder provisionar la infraestructura de forma fácil, dado que mi WordPress no necesita complejidad. Para conseguir esto, habilitaremos HTTPS usando las ebextensions de Beanstalk. No olvidarse de la configuración necesaria a nivel de Security Group.

El código sería algo así:

files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule ssl_module modules/mod_ssl.so
      Listen 443
      <VirtualHost *:443>
        <Proxy *>
          Order deny,allow
          Allow from all
        </Proxy>

        SSLEngine             on
        SSLCertificateFile    "/etc/pki/tls/certs/server.crt"
        SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
        SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol           All -SSLv2 -SSLv3
        SSLHonorCipherOrder   On
        SSLSessionTickets     Off
        
        Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff
        
        ProxyPass / http://localhost:80/ retry=0
        ProxyPassReverse / http://localhost:80/
        ProxyPreserveHost on
        RequestHeader set X-Forwarded-Proto "https" early
        
      </VirtualHost>

Habilitar la redirección HTTP a HTTPS

Una vez tengamos esto funcionando hay que añadir otro pequeño código que también lo proporciona la documentación oficial. Yo en su día ande buscando y no lo encontré, quizá lo han actualizado. Documentación AWS oficial de HTTP a HTTPS.

Este código también lo añadiremos en forma de .ebextensions para que al desplegar la aplicación, siempre lo tengamos y la redirección funcione. El código sería este para la versión PHP:

files:
   /etc/httpd/conf.d/http-redirect.conf:
     mode: "000644"
     owner: root
     group: root
     content: |
       RewriteEngine On
       RewriteCond %{HTTP:X-Forwarded-Proto} !https
       RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
       RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Una vez reiniciado el apache ya podemos comprobarlo, recibiremos un 302. No estoy seguro si eso es bueno para el SEO pero bueno, tampoco me preocupa demasiado en mi caso.

curl -I -k -s  http://www.rubenortiz.es
HTTP/1.1 302 Found
Date: Sat, 08 Aug 2020 16:49:29 GMT
Server: Apache
Location: https://www.rubenortiz.es/
Content-Type: text/html; charset=iso-8859-1

Grado B según Mozilla Obs

Leave a Reply

Your email address will not be published. Required fields are marked *