Программируемый прозрачный вперед проксируют

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

Я обнаружил отличный компромисс во вперед прокси между scriptability и устойчивостью. Например, их бесчисленные прокси, разработанные в Ruby и Python, которые позволяют Вам осматривать каждый ответ запроса и регистрировать, изменять, фильтровать по желанию... однако их или не удаваться проксировать все необходимое или катастрофический отказ после 20 минут использования.

С другой стороны, я подозреваю, что Сквид и Apache довольно устойчивы и стабильны, однако ни за что в жизни я не могу определить, как я могу разработать динамическое поведение через сценарии. В конечном счете я хотел бы установить квоту и динамично отфильтровать на той квоте. Часть меня испытывает желание смешивать mod_proxy и mod_perl?? мог позволить интересные динамические прокси, но его твердое для знания, где начать и знать если его даже возможный.

Советуйте.

9
задан jrhicks 19 December 2009 в 15:46
поделиться

4 ответа

Squid и Apache имеют механизмы вызова внешних скриптов для разрешения/запрещения решений на запрос. Это позволяет использовать любой из них для своих прокси-движков, но вызывать внешний скрипт по запросу для обработки произвольной сложности. Ваш код должен управлять только бизнес-логикой, а не тяжелым.

В Apache я никогда не использовал mod_proxy таким образом, но я использовал mod_rewrite. mod_rewrite также позволяет прокси-запросы. Директива RequestMap позволяет передать решение внешнему скрипту:

MapType: prg, MapSource: Путь к файловой системе Unix к действительному обычному файлу

Здесь источником является программа, а не файл карты. Для её создания вы можете использовать язык по вашему выбору, но результатом должна быть исполняемая программа (либо объектный код, либо скрипт с волшебным трюком с куки-файлами '#!/path/to/interpreter' в качестве первой строки).

Эта программа запускается один раз, когда запускается сервер Apache, а затем связывается с переписывающим движком через его stdin и stdout-файловые хэндлы. Для каждого поиска map-функции она получит ключ для поиска в виде строки, оканчивающейся на новой строке в stdin. Затем она должна вернуть найденное значение как newline-терминированную строку на stdout или четырехсимвольную строку ``NULL'', если это не удастся (т.е. для данного ключа нет соответствующего значения).

С помощью Squid можно получить аналогичную функциональность с помощью директивы external_acl_type :

Этот тег определяет, как внешние классы acl с помощью вспомогательной программы должны искать статус.

g'luck!

.
3
ответ дан 4 December 2019 в 23:06
поделиться

Я работал над библиотекой HTTP в python, написанной с использованием прокси-серверов специально в качестве варианта использования. На данный момент она не очень зрелая (конечно, нужно больше тестирования, и юнит-тестов), но она достаточно полная, чтобы я нашел ее полезной. Не знаю, удовлетворит ли он ваши потребности или нет.

Библиотека называется httpmessage, сайт с кодом google находится здесь . Пример написания прокси-сервера есть на странице examples page.

Я рад получить обратную связь и/или исправления ошибок.

.
2
ответ дан 4 December 2019 в 23:06
поделиться

Если вы ищете Perl решение, то посмотрите на HTTP::Proxy

Не уверен в каких-либо решениях mod_perl. CPAN действительно вызывает Apache::Proxy и Googleling вызывает MyProxy. Однако, обратите внимание, что оба они немного старые, так что YMMV, но вы можете найти их полезными.

.
2
ответ дан 4 December 2019 в 23:06
поделиться

Я бы использовал squid, который может выполнять другие программы для изменения запросов на лету.

.
0
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: