Доработка opensource программы TinyProxy

Максим12 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
21.10.2012

Прокси менеджер

Есть такой прокси как tinyproxy http://linux.die.net/man/5/tinyproxy.conf ,

легкий понятный, стабильно работающий. Для одного проекта нужны следуюшие модификации.

1) Убрать весь код которые отвечает за стандартную логику выбора вышестоящего прокси ( опции Upstream, No Upstream ),

мне эта функциональность не нужна. Нужно будет реализовать альтернативную логику ( см ниже)

2) Альтернативная логика будет заключаться, в том, что клиенту будет позволено выбирать через какой

вышестоящий прокси можно будет послать запрос, а также реализовать API по динамическому добавлению - удалению upstream

2.1 Предполагается, что тинипрокси будет держать в памяти список возможных прокси ( до 25 тыс IP адресов),

группу к которой относится прокси, и базовую статистику работы с вышестоящим прокси ( количество байт, количество запросов,количество неудачных запросов)

2.2) При запуске , он должен считывать список вышестоящих прокси из файла. По сигналу ( любой на ваш выбор), он должен сохранять данные о вышестоящих прокси в файл.

2.3) Файл представляет собой обычный текстовый файл вида ( до 25 тыс строк)

ip_address_of_upstram0:port,Group1

ip_address_of_upstram1:port,Group1

ip_address_of_upstram2:port,Group2

ip_address_of_upstram3:port,Group2

3.1) У тинипрокси есть такая опция как StatHost='yourname.local' , когда клиент обращается к такому хосту, то тинипрокси

прехватывает запрос и выдает в ответ статистику, нужно аналогично реализовать опцию ApiHost. При обращении к хосту указанному

в этой опции, должны выполнятся комманды определяемые дополнительными полями в HTTP заголовках.

3.2) Все API запросы передаются в HTTP полях X-API-XXXXXXX

3.3) Возможные API запросы ( HTTP заголовки)

3.3.1) X-API-ShowGroup: - в ответ выдает список груп

3.3.2) X-API-AddGroup: - создать новую группу ( максимально 15-20 групп)

3.3.3) X-API-DelGroup: - удалить группу

3.3.4) X-API-MoveGroup: перенести все IP адреса в новую группу ( если ее не существует, то создать новую) и удалить

3.3.5) X-API-AddProxy: Добавить прокси в группу

3.3.6) X-API-DelProxy: удалить прокси из группы

3.3.7) X-API-ShowGroupMembers: показывает список IP в этой группе

3.3.8) X-API-ShowGroupMembersStats: показывает список IP в этой группе и краткую статистику по каждому IP - количество байт, количество запросов,количество неудачных запросов

3.3.9) X-API-ShowProxyStats: краткую статистику

Те все API комманды относятся к управлению группами и адресами.

3.4) В конфиге определяется переменная DefaultGroup

3.5) При обработке обычного запроса, прокси обращает внимание на наличие следующих HTTP заголовков

X-PM-Group:

X-PM-Proxy: IP:Port

Если не существует, то ее нужно создать и добавить туда переденный адрес прокси.

Если заголовок X-PM-Group не определен, то используется DefaultGroup.

3.5.1) - Если заголовок X-PM-Proxy не определен, то нужно смотреть на переменную конфига DefaultAction

Если значение DefaultAction = Direct , то устанавливаем соединение с запрашиваемым узлом напрямую.

Если значение DefaultAction = Rotary , то случайным образом выбирается один из IP адресов из группы X-PM-Group и соединение уставливается через него.

3.5.2) - Если использовался вышестоящй проксти, то нужно передать клиенту информацию о том какой из апстримов использовался, чтобы клиент при повторных запросах мог повторно использовать один и тот же прокси.

Информация клиенту передается путем добавления заголовков

X-PM-UsedGroup:

X-PM-UsedProxy: IP:Port

Работа не срочная, две-три недели вполне приемлемый срок, оплата WMR. Разбиваем проект на стадии, оплата за каждую стадию.