¿Es posible configurar nginx para invertir el proxy a un servidor, pero si el archivo no existe en el servidor A, entonces tener un recurso alternativo al servidor B donde definitivamente estará el archivo?
Necesito hacer una migración de 2TB S3 y simplificaría el proceso si nginx pudiera configurarse de esta manera.
Esto es lo que estoy usando actualmente como configuración de proxy inverso:
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:100m
inactive=30d max_size=10g;
server {
location /image/ {
proxy_pass https://origin.example.com/;
proxy_set_header Host origin.example.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache STATIC;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
}
Respuesta1
Nginx Plus tiene la capacidad Active Health Check. Puede agregar los 2 servidores a un grupo ascendente, aplicar una verificación de estado activa con respecto al URI del archivo y, si se devuelve un error 404, Nginx marcará ese servidor como en mal estado y todas las solicitudes fluirán al otro servidor. en el grupo.
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/#hc_active
Sin embargo, eso hará rebotar todo su tráfico al otro servidor.
Si tiene control del upstream, también puede usar X-Accel
:
https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/
Si el archivo no existía en el flujo ascendente, el flujo ascendente devolvería el X-Accel-Redirect
encabezado, que el proxy inverso leería y solicitaría el archivo al otro servidor.