Доработка opensource программы TinyProxy
Прокси менеджер
Есть такой прокси как 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. Разбиваем проект на стадии, оплата за каждую стадию.