miércoles, 9 de junio de 2021

Evitar contenido HTTP usando Apache con HTTPS



Cómo evitar mixed content warning en Apache.

Si servimos una web en HTTPS mediante Apache y esta enlaza a recursos como imágenes, css o JavaScript mediante links que usen HTTP, los navegadores no cargarán estos recursos.

Para evitar este problema, podemos configurar el siguiente código en el .htaccess:

<ifModule mod_headers.c> Header always set Content-Security-Policy "upgrade-insecure-requests;" </IfModule>

Este encabezado indica al navegador web que "actualice" las solicitudes HTTP a HTTPS sin tener que tocar código en el sitio web, pero solo funciona en navegadores modernos.


Tocando código


Si podemos tocar código, deberíamos cambiar los enlaces de la siguiente manera:

1) Modificando todos los enlaces para cargar archivos a través de HTTPS:

<img src="https://ejemplo.com/imagen.png">

2) Alternativamente, se puede prescindir de http y https y dejar que el servidor elija el esquema:

<img src="//ejemplo.com/imagen.png">

3) Por último, podemos usar rutas relativas:

<img src="/imagen.png">

NOTA: "//" hace que el navegador utilice el mismo esquema de la URL actual, por lo que utilizará https:// en las páginas HTTPS y http:// en las páginas HTTP.
0

martes, 1 de junio de 2021

Protocol error (NSPOSIXErrorDomain:100)



Cómo solucionar: The operation couldn’t be completed. Protocol error (NSPOSIXErrorDomain:100).



Tras pasar un dominio por un NGINX actuando como reverse proxy y Apache tras el proxy actuando como web server, me comentó alguien que la web no se veía en el navegador Safari sobre MacOS / iOS.

Al acceder al sitio web, el navegador mostraba el siguiente error:


The operation couldn’t be completed. Protocol error (NSPOSIXErrorDomain:100)

Como decía, cuando NGINX se usa como proxy inverso con Apache como back-end, este obtiene recursos de Apache usando HTTP/1.1, que el servidor back-end intenta actualizar a HTTP/2 enviando el encabezado "Upgrade: h2". Como la conexión ya está establecida en HTTP/2, falla.

Para evitar ver este error y mostrar la web de turno correctamente, podemos usar el siguiente parámetro en el archivo nginx.conf o en un include al mismo:

proxy_hide_header Upgrade;

Tras esto, bastará con hacer un reload de la configuración de NGINX y la web ya será accesible desde Safari sobre MacOS o iOS de Apple.


Fuentes:

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header
https://trac.nginx.org/nginx/ticket/915
https://megamorf.gitlab.io/2019/08/27/safari-nsposixerrordomain-100-error-with-nginx-and-apache/
0