Есть squid 2.7, работаюший на убунте. Оперативной памяти у комптьютера - 2гига. В среднем за 5 лет работы черный список сайтов наполнился на около 1500 сайтов. Развлечения, соц.сети, порно... Разбит по категориям, в максимальном списке - 700 сайтов.
Из вышестоящей организации пришел файл с категорическим приказом: обеспечить фильтрацию приложенного списка, и файл со списком на 10 мегабайт, длиной в 552тысячи сайтов.
Первая попытка сделать решение в лоб через:
acl url_blnav url_regex "/home/....../domains.txt"
http_access deny url_blnav
привела к тому, что сквид отожрал 4.5гига виртуальной памяти под список и ушел в глубокий своп, полностью перестав отвечать на запросы.
Я сократил список до 380тыч сайтов, путем убирания сайтов с общими словами, типа sex porno erotic и пр. Потом пробовал разбивку файла на части - это уменьшает потребление памяти (до 2.5гиг), но все равно не укладывается в оперативку. В итоге сквид все равно уходит в своп и затыкается. на моих обычных правилах сквид занимал ~650-700 мегабайт памяти.
Как можно засунуть в сквид блоклист на 380 тысяч сайтов?
Добавить память - не могу. Обсуждать вопрос о снижении кол-ва сайтов (там столько ереси, куда 100% не пойдут люди) - тоже не могу.
отдельный вопрос - поможет ли апгрейд на сквид 3.3 или 3.2 ?
Насколько мне помнится, под каждую строчку в domains.txt squid создаст отдельную acl в памяти. Можно попробовать использовать SquidGuard (http://www.squidguard.org/) он как раз для работы с большими списками.