В настоящее время у меня есть 3 веб-сервера, обслуживающих большие файлы с балансировкой нагрузки на уровне DNS. Есть один «главный» сервер и два «подчиненных» сервера.
На главном сервере есть все необходимые файлы, и он передает файлы подчиненным. В некоторых случаях одно или оба ведомых устройства не имеют определенного файла. В этом случае отказывается от всего процесса, что не идеально.
Когда на ведомом сервере нет файла, я хочу, чтобы он перенаправлял запрос на ведущий, чтобы процесс не завершился ошибкой.
Я знаю, что могу использовать ErrorDocuments для отображения настраиваемой страницы ошибки (даже если эта страница ошибки находится на другом сервере, например): ErrorDocument 404 http://master.exmaple.com/404page.html
однако я хочу, чтобы он обслуживал файл от мастера, а не страницу с ошибкой.
Мне кажется, что это можно сделать с помощью чего-то вроде ErrorDocument 404 http://master.example.com/{{requested_file}}
но я не знаю, возможно ли такое вообще.
Думаю, мне здесь не хватает чего-то простого. Может ли кто-нибудь указать мне правильное направление?
Apache 2.4.7 под управлением Ubuntu 14.04
Спасибо.
Вы можете сделать это с помощью комбинации ErrorDocuments и mod_rewrite.
Итак, ваш ErrorDocument должен быть
ErrorDocument 404 /not_found_redirect/
Поэтому, когда документ не найден, сервер перенаправляется на локальный URL-адрес. Хитрость заключается в том, что многие переменные среды передаются на перенаправленный URL (http://httpd.apache.org/docs/current/custom-error.html#variables). REDIRECT_REQUEST_URI должен быть тем, что вам нужно.
Потому что тогда в mod_rewrite вы используете переменные среды для перенаправления на главный сервер
RewriteEngine On
RewriteRule ^/not_found_redirect/ http://master.example.com%{REDIRECT_REQUEST_URI} [R,L]
И браузер должен быть отправлен в правильное место на главном сервере.