¿Cómo hacer que HAProxy reescriba en un back-end diferente cuando falta el primer archivo? Lo que necesito es errorloc
hacer una reescritura en lugar de redirigir, para que el cliente no tenga conocimiento de la redirección.
Hemos desarrollado una aplicación con NginX en mente, que era tanto el proxy inverso de equilibrio de carga como el servidor web para archivos estáticos. La aplicación se basa en el marco Opa que requiere sesiones fijas basadas en cookies, compatibles con NginX y HAproxy. La característica de aplicación con la que tenemos problemas es la generación dinámica de contenido. Genera imágenes a pedido, pero después de la generación se guarda en el disco y se puede acceder estáticamente con una ruta determinista.
El problema se resolvió fácilmente con NginX: intenta leer el archivo local y usar el back-end de carga equilibrada solo si falta el archivo (aún no se ha generado):
server {
server_name wkaliszu.pl;
location /thumb {
root /path_on_disk/to_cached_content;
expires 7d;
# try to access already generated content
try_files $uri @wkaliszu;
}
location / {
# reverse proxy to the application
[...]
}
location @wkaliszu {
# reverse proxy to the application
[...]
}
}
El servidor se migró y ahora usa HAPproxy para el equilibrio de carga, que no es un servidor web y no es compatible con esta función. Ahora la generación dinámica de software se realiza cada vez que el cliente intenta acceder al recurso, lo que es mucho más lento y desperdicia recursos. Estaría bien si pudiera usar el siguiente back-end si el primero (servidor web de almacenamiento en caché simple para archivos estáticos) fallara con el error 404, pero no puedo encontrar una manera de hacerlo de manera simple. Redireccionar /thumb
a NginX, que intenta leer un archivo estático y vuelve a escribir en HAproxy con un nuevo encabezado HTTP, solo me viene a la mente, pero me gustaría encontrar algo mejor.