simplyAl
Новичок
Advanced программинг: Level 7 routing на ПХП
Нужно сделать L7 роутинг с самописной логикой (функционала патча L7 для iptables не хватает) на ПХП.
Вариант №1
Client
|
Level 7 Router (PHP)
|
Load Balancer
|
Content Server
ХТТП запрос GET "/pfix/123"
где 123 - идентификатор контента (это может быть изображение например или любой другой файл),
Запрос попадет на "роутер", где логика приобразует его в GET "/_ID_/123" и передает запрос дальше на балансер, который по признаку /_ID_/ выбирает правильное зеркало (Content Server).
Проблема:
Запрос на балансер нужно перекинуть так, чтобы балансер думал, что запрос пришел от Client'a! Т.е. когда пакет дойдет до балансера, в src_ip должен стоять IP адрес клиента, а не роутера. И при этом логинка роутера (та которая меняет "GET /pfix/123" на "GET /_ID_/123") должна быть релизована на ПХП.
Вариант №2
Роутер объеденить с балансером, получится
Client
|
Load Balancer <-> PHP Level7
|
Content Server
Например, на балансер приходит запрос GET "/pfix/123". Перед тем как начать выбирать зеркало, балансер передает ХТТП запрос на какой-то локальный процесс (через пайп или shared memory) и получает от него модифийированный GET "/_ID_/123", с которым дальше балансер рабоатет по бычной схеме.
Тогда вопрос: как в линуксе перехватывать пакеты (запросы), запихивать их в программу (можно тело пакета целиком), от этой программы получать модифицированный пакет и дальше работать с ним по обычной схеме? При этом программа, модифицирующая пакет, должна быть написана на ПХП (можно в виде демона).
Буду благодарен за любые идеи.
Нужно сделать L7 роутинг с самописной логикой (функционала патча L7 для iptables не хватает) на ПХП.
Вариант №1
Client
|
Level 7 Router (PHP)
|
Load Balancer
|
Content Server
ХТТП запрос GET "/pfix/123"
где 123 - идентификатор контента (это может быть изображение например или любой другой файл),
Запрос попадет на "роутер", где логика приобразует его в GET "/_ID_/123" и передает запрос дальше на балансер, который по признаку /_ID_/ выбирает правильное зеркало (Content Server).
Проблема:
Запрос на балансер нужно перекинуть так, чтобы балансер думал, что запрос пришел от Client'a! Т.е. когда пакет дойдет до балансера, в src_ip должен стоять IP адрес клиента, а не роутера. И при этом логинка роутера (та которая меняет "GET /pfix/123" на "GET /_ID_/123") должна быть релизована на ПХП.
Вариант №2
Роутер объеденить с балансером, получится
Client
|
Load Balancer <-> PHP Level7
|
Content Server
Например, на балансер приходит запрос GET "/pfix/123". Перед тем как начать выбирать зеркало, балансер передает ХТТП запрос на какой-то локальный процесс (через пайп или shared memory) и получает от него модифийированный GET "/_ID_/123", с которым дальше балансер рабоатет по бычной схеме.
Тогда вопрос: как в линуксе перехватывать пакеты (запросы), запихивать их в программу (можно тело пакета целиком), от этой программы получать модифицированный пакет и дальше работать с ним по обычной схеме? При этом программа, модифицирующая пакет, должна быть написана на ПХП (можно в виде демона).
Буду благодарен за любые идеи.
Ну-ну