Для прямого прокси Squid, которому нужно преобразовать ответ HTML, используйте путь адаптации. Squid обрабатывает прокси-запрос браузера; служба ответов ICAP выполняет преобразование тела и возвращает адаптированное сообщение HTTP.

Это даёт преобразованию определённое место в жизненном цикле запроса. Правило заголовка ответа не может заменить синтаксический анализатор HTML, а отдельный фильтр веб-сервера не обрабатывает автоматически трафик, проходящий через Squid.

Подключение службы ответов

Для сборки Squid 7 с поддержкой ICAP и существующей совместимой службы форма конфигурации такова:

acl adaptation_clients src 192.0.2.0/24

icap_enable on
icap_service html_editor respmod_precache bypass=0 icap://127.0.0.1:1344/modify

adaptation_access html_editor allow adaptation_clients
adaptation_access html_editor deny all

Диапазон клиентов и URI службы — примеры. URI должен указывать на реальную службу ICAP, реализующую преобразование ответа; объявление /modify её не создаёт. Фрагмент дополняет существующий слушатель прокси и управление доступом.

respmod_precache выбирает адаптацию ответов в точке перед кэшем. adaptation_access выбирает транзакции для этой службы. Параметр bypass=0 означает, что Squid не может молча пропустить эту службу, когда применимая транзакция сталкивается с отказом службы. Выбирайте такое поведение при отказе в зависимости от того, обязательно ли преобразование.

Директивы адаптации зависят от версии. В частности, эти справочники конфигурации перечисляют интерфейсы службы ICAP и доступа к адаптации для Squid 7 и более ранних поддерживаемых веток и помечают их как недоступные в Squid 8. Рассматривайте фрагмент как пример для Squid 7, а не копируйте его в произвольный выпуск.

Дайте службе точный контракт преобразования

Укажите, какие ответы допустимы и какие изменения нужны. Преобразование только HTML должно оставлять нетронутыми изображения, архивы и не связанные с ними медиаданные. Служба также должна обрабатывать то представление, которое она реально получает: сжатые тела, кодировки символов и метаданные, описывающие изменённое тело. Вставка текста в произвольные байты ответа не является общим преобразованием HTML.

Учитывайте кэширование, если замена зависит от пользователя. Преобразование перед кэшем и общий кэш — плохое сочетание, если полученное представление действительно только для одного читателя. Держите в согласии возможность кэширования и политику преобразования и соблюдайте применимые директивы no-transform.

Наконец, обычный туннель HTTPS CONNECT передаёт зашифрованные байты. Он не открывает HTML адаптеру ответов. Намеренно управляемая схема проверки TLS требует собственной совместимой настройки и доверия клиентов, прежде чем расшифрованные ответы смогут попасть на этот путь. Одно лишь правило ICAP не добавляет такой видимости.

Похожие статьи