Як змусити HAProxy переписати на інший бек-енд, коли перший файл відсутній? Що мені потрібно - це errorloc
зробити перезапис замість перенаправлення, тож клієнт не знає про переадресацію.
Ми розробили додаток, що має на увазі NginX, який одночасно завантажував зворотний проксі-сервер і веб-сервер для статичних файлів. Програма базується на базі Opa, яка вимагає липких сеансів на основі файлів cookie - підтримуваних як NginX, так і HAproxy. Особливістю програми, з якою ми маємо проблеми, є динамічне створення контенту. Він генерує зображення на вимогу, але після покоління він зберігається на диску і може бути доступний статично за допомогою детермінованого шляху.
Проблема була легко вирішена за допомогою NginX - вона намагається прочитати локальний файл і використовувати збалансований завантаження бек-енд, лише якщо файл відсутній (ще не створено):
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
[...]
}
}
Сервер був перенесений і тепер використовує HAPproxy для врівноваження завантаження, яке не є веб-сервером і не підтримує цю функцію. Зараз динамічне генерування програмного забезпечення здійснюється кожного разу, коли клієнт намагається отримати доступ до ресурсу, що значно повільніше і витрачає ресурси. Було б добре, якщо він міг би використовувати наступний бек-енд, якщо перший (простий веб-сервер кешування для статичних файлів) не вдався до помилки 404, але я не можу знайти спосіб зробити це простим способом. /thumb
Приходить лише перенаправлення на NginX, який намагається прочитати статичний файл і знову переписується на HAproxy з новим заголовком HTTP, але я хотів би знайти щось краще.