Глава 22 Proxy-сервер
При подключении к любому провайдеру вам выдаются параметры настройки – адрес сервера DNS, адрес почтового сервера и сервера новостей, а так же – адрес proxy-сервера.
Что собой представляет proxy-сервер? Если вы настроите свой браузер для работы через proxy-сервер, то при запросе некоторого документа из Интернета, если некоторое время назад кто-то уже обращался с подобным запросом, вы получите документ незамедлительно, с максимальной скоростью, на которую способно ваше сетевое подключение, потому что вы получите копию документа, взятую из кэша proxy-сервера. Если же proxy-сервер не имеет в своем кэше данного документа, то proxy-сервер запросит удаленный WWW-сервер, хранящий оригинал, и выдаст документ вам, одновременно положив копию документа в свой кэш.
Чем больше пользователей пользуются proxy-сервером, тем более существенной становится его помощь. Согласно статистике, количество обращений пользователей к одним и тем же документам в сети Интернет приближается к 60 %.
Многие proxy-серверы обладают еще одним интересным свойством – они могут обмениваться информацией с соседними proxy-серверами, что существенно ускоряет доступ к данным, хранящимся на удаленных или сильно загруженных серверах.
Proxy-сервер предоставляет следующие возможности:
• централизованный выход в Интернет через один сервер в сети;
• локальное хранение часто просматриваемых документов для увеличения скорости загрузки страниц;
• возможность регулировать пропускную способность канала в зависимости от его нагрузки;
• авторизованный доступ в Интернет;
• возможность обмена данными кэша с соседними proxy-серверами.
Однако не все данные могут быть корректно получены через proxy-серверы. Это касается, прежде всего, динамически формируемой информации. Однако большинство современных proxy-серверов имеют большое количество настроек и обладают множеством интеллектуальных алгоритмов, позволяющих в большинстве случаев корректно получать самую свежую информацию.
Наиболее распространенным proxy-сервером, доступным под лицензией GNU, является Squid.
Squid
Squid это высокопроизводительный кэширующий proxy-сервер, поддерживающий протоколы FTP, gopher и HTTP. Squid сохраняет часто запрашиваемые данные в оперативной памяти компьютера, что позволяет резко увеличить производительность proxy-сервера, кэширует DNS-запросы (это свойство интересно тем, кто не имеет своего DNS-сервера). Помимо вышеперечисленных возможностей, поддерживает SSL, расширенный контроль доступа и полную регистрацию запросов.
Одной из ключевых возможностей пакета Squid является использование протокола Internet Cache Protocol (ICP, Протокол интернет-кэширования), что позволяет создать иерархию proxy-серверов Squid для дополнительной экономии пропускной способности канала.
Поддерживаемые функции Squid:
• proxy и кэширование HTTP, FTP;
• proxy для SSL;
• иерархия кэшей;
• ICP, НТСР, CARP, Cache digests;
• прозрачный proxy;
• WCCP;
• гибкий контроль доступа;
• HTTP-серверное ускорение;
• SNMP;
• кэширование DNS-запросов;
• возможность ограничения трафика.
Рассмотрим некоторые из этих функций подробнее.
Протокол ICP
Протокол ICP используется в иерархии кэшей для поиска объектов в дереве кэшей Squid-серверов. Если ваш Squid не находит нужного документа, то посылает ICP-запрос другим Squid-серверам, входящим в вашу иерархию proxy-серверов. Эти серверы отвечают ICP ответами hit (попадание) или miss (промах). После получения ответов ваш сервер решает, при помощи какого кэша proxy-сервера получить необходимые ему данные.
Cache digest
Компактная форма представления списка содержимого кэша proxy-сервера. Proxy-серверы могут обмениваться этой информацией с соседями для избежания необходимости делать ICP-запросы (экономия трафика). В качестве ключей объектов используется протокол шифрования MD5.
Иерархия кэшей
Иерархия кэшей – это структура кэширующих proxy-серверов, расположенных логически как родительский/дочерний и братский узлы таким образом, что кэши, ближайшие к интернет-каналу, являются родителями тем proxy-серверам, которые находятся дальше от точки доступа к Интернету. В случае, когда кэш запрашивает объект от родителя, и у того в кэше необходимый объект отсутствует, родительский proxy-сервер получает объект из Интернета, кэширует его и передает дочернему. Таким образом, при помощи иерархии достигается максимальная разгрузка канала.
Кроме родительских/дочерних отношений, Squid поддерживает понятие братских кэшей – находящихся на одном уровне иерархии. Каждый proxy-сервер в иерархии независимо ни от кого решает, откуда получать необходимый объект – напрямую из Интернета, от родительского или братского кэша.
Алгоритм получения запрошенного объекта пакетом Squid
Алгоритм таков:
1. Разослать ICP-запросы всем братским кэшам.
2. Дождаться всех ответов, пришедших в течение заданного времени:
• получив первый ответ hit (попадание), получить объект;
• или взять объект от первого родительского кэша, ответившего miss (зависит от настройки);
• или получить объект из Интернета.
Конфигурирование пакета Squid