Cómo evitar mostrar contenido HTTP en una web HTTPS a través de NGINX.
Al pasar un dominio, digamos dominio.com, a través de NGINX actuando como proxy inverso, me encontré que algunos JavaScript no cargaban, por lo que la web funcionaba a medias.
Tras mucho rato tratando de averiguar por qué no cargaban los JavaScript, me di cuenta de lo siguiente:
1) Hacía un redirect HTTP a HTTPS en NGINX.
2) La web cargaba recursos en HTTP en su código fuente que a su vez trataban de ir a HTTPS debido mi configuración de NGINX, y, al estar en el código fuente, este redirect no funcionaba.
Tras dar muchas vueltas y probar sin éxito cosas como:
proxy_set_header X-Forwarded-Proto https;
acabé usando el siguiente header dentro del location del dominio en NGINX:
add_header 'Content-Security-Policy' 'upgrade-insecure-requests';
Esta directiva indica al navegador del usuario que trate todas las URL inseguras de un sitio (las que se sirven a través de HTTP) como si hubieran sido reemplazadas por URL seguras (las que se sirven a través de HTTPS). Esta directiva está destinada a sitios web con un gran número de URL heredadas inseguras.
La directiva 'upgrade-insecure-requests' se evalúa antes que 'block-all-mixed-content', por lo que permite cargar recursos HTTP vía HTTPS sin bloquearlos.
0 comentarios:
Publicar un comentario