Jak zmienić HAProxy na inny back-end, gdy brakuje pierwszego pliku? Potrzebuję errorloc
tylko przepisania zamiast przekierowania, więc klient nie jest świadomy przekierowania.
Opracowaliśmy aplikację z myślą o NginX, która była zarówno równoważącym obciążenie zwrotnym serwerem proxy, jak i serwerem WWW dla plików statycznych. Aplikacja oparta jest na frameworku Opa , który wymaga lepkich sesji opartych na plikach cookie - obsługiwanych zarówno przez NginX, jak i HAproxy. Problemem z aplikacją jest dynamiczne generowanie treści. Generuje obrazy na żądanie, ale po wygenerowaniu są zapisywane na dysku i można uzyskać do nich dostęp statyczny za pomocą deterministycznej ścieżki.
Problem można łatwo rozwiązać za pomocą NginX - próbuje odczytać plik lokalny i użyć back-endu z równoważeniem obciążenia tylko wtedy, gdy brakuje pliku (jeszcze nie został wygenerowany):
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
[...]
}
}
Serwer został zmigrowany i teraz używa HAPproxy do równoważenia obciążenia, który nie jest serwerem WWW i nie obsługuje tej funkcji. Teraz dynamiczne generowanie oprogramowania jest wykonywane za każdym razem, gdy klient próbuje uzyskać dostęp do zasobu, co jest znacznie wolniejsze i marnuje zasoby. Byłoby dobrze, gdyby mógł użyć następnego zaplecza, gdyby pierwszy (prosty buforujący serwer WWW dla plików statycznych) zawiódł z błędem 404, ale nie mogę znaleźć sposobu, aby to zrobić w prosty sposób. Przekierowanie /thumb
do NginX, które próbuje odczytać plik statyczny i ponownie przepisuje do HAproxy z nowym nagłówkiem HTTP, przychodzi mi na myśl, ale chciałbym znaleźć coś lepszego.