У меня есть серверы, распределенные по нескольким дата-центрам, каждый из которых хранит разные файлы. Я хочу, чтобы пользователи имели возможность доступа к файлам на всех серверах через один домен и чтобы отдельные серверы возвращали файлы непосредственно пользователям.
Ниже приведен простой пример:
1) Браузер пользователя запрашивает http://www.example.com/files/file1.zip
2) Запрос отправляется на сервер A на основе записи DNS A для example.com.
3) Сервер A анализирует запрос и определяет, что /files/file1.zip хранится на сервере B.
4) Сервер A направляет запрос на сервер B.
5) Сервер B возвращает файл file1.zip непосредственно пользователю, не проходя через сервер A.
Примечание: шаги 4 и 5 должны быть прозрачными для пользователя и не должны включать в себя отправку перенаправления пользователю, поскольку это нарушит требование одного домена.
По моим исследованиям, то, что я хочу достичь, называется «Прямой возврат сервера», и это общая настройка для балансировки нагрузки. Это также иногда называют полу-обратным прокси.
На шаге 4 мне кажется, что мне нужно выполнить преобразование MAC-адреса, а затем передать запрос обратно в сеть и для серверов вне сети сервера. Потребуется туннелирование.
Для шага 5 мне просто нужно настроить сервер B в соответствии с реальными серверами в настройке балансировки нагрузки. А именно, сервер B должен иметь IP-адрес сервера A в интерфейсе обратной связи и не должен отвечать на запросы ARP для этого IP-адреса.
Моя проблема в том, как на самом деле выполнить шаг 4?
Я обнаружил множество аппаратных и программных средств, которые могут сделать это для простой балансировки нагрузки на уровне 4, но эти решения не отвечают требованиям и не могут справиться с тем типом пользовательской маршрутизации, который мне требуется. Похоже, мне нужно будет свернуть свое собственное решение.
В идеале я хотел бы выполнить маршрутизацию / пересылку на уровне веб-сервера, т. Е. На PHP или C # / ASP.net. Однако я готов сделать это на более низком уровне, таком как Apache или IIS, или на еще более низком уровне, то есть настраиваемой прокси-службе перед всем.