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