Назад | Перейти на главную страницу

Запрос перенаправления Apache на другой сервер при ошибке

В настоящее время у меня есть 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]

И браузер должен быть отправлен в правильное место на главном сервере.