Мне удалось настроить Squid3 на сервере Debian Squeeze 6.0 в прозрачном режиме с перенаправлением iptables nat.
Все запросы на порт 80 правильно перенаправляются на squid, а затем сравниваются с файлом белого списка.
Все запросы к сайтам, не включенным в белый список, отправляются на настраиваемую страницу ERR_ACCESS_DENIED. Эта страница содержит простую форму входа.
Таким образом, когда сайт заблокирован, пользователь может добавить этот сайт в белый список.
Я создал очень простой скрипт PHP, который берет URL (с регулярным выражением), добавляет его в белый список и перезапускает squid.
На этом этапе я бы перенаправил браузер на новый авторизованный сайт с помощью простого
$your_url = http://www.example.com;
header("Location: $your_url");
но squid дает мне страницу ERR_INVALID_URL, пытающуюся извлечь
(null)://www.example.com
Если я попытаюсь ввести URL-адрес в адресной строке, сайт будет обслуживаться правильно.
Я пытался установить тайм-аут в PHP перед перенаправлением, но даже с тайм-аутом в 1 минуту перенаправление не выполняется. Между тем, ввод URL-адреса в адресной строке работает нормально.
Есть подсказка?
ОБНОВИТЬ Проблема легко решается переходом на Squid 2.7
Ошибка Squid3 Вот
Проблема решена при переходе на Squid 2.7
У меня есть аналогичный проект под названием parentwall. Я решил проблему, используя squid -k reconfigure вместо перезапуска squid. То же самое можно сделать и со сценариями rc.
Перезапуск Squid длится вечно и не требует перезагрузки белого списка.
Просто подумал, но здесь может быть проще просто перенаправить javascript. Поэтому вместо того, чтобы пытаться выполнить перенаправление с помощью PHP, просто верните страницу с некоторым javascript.
Он немного менее элегантен, но, вероятно, будет проще.