Problema resolvido ao trocar para o Squid 2.7
Eu consegui configurar o Squid3 em um servidor Debian Squeeze 6.0 em modo transparente com o redirecionamento nat do iptables.
Todas as solicitações na porta 80 são redirecionadas corretamente para o squid e, em seguida, comparadas com um arquivo da lista de desbloqueio.
Todas as solicitações para sites não cobertos pela lista de permissões são enviadas para a página personalizada ERR_ACCESS_DENIED. Esta página contém um formulário de login simples.
Assim, quando um site é bloqueado, o usuário pode adicionar esse site à lista de permissões.
Eu criei um script PHP muito simples que pega o URL (com um regex), adiciona-o à lista branca e reinicia o squid.
Neste ponto, eu redirecionaria o navegador para o novo site autorizado, com um simples
$your_url = http://www.example.com;
header("Location: $your_url");
mas o squid me fornece uma página ERR_INVALID_URL para tentar recuperar
(null)://www.example.com
Se eu tentar digitar o URL na barra de endereço, o site será exibido corretamente.
Eu tentei definir um tempo limite em PHP antes de redirecionar, mas mesmo com um tempo limite de 1 minuto, o redirecionamento falha. Nesse meio tempo, digitar o URL na barra de endereços funciona bem.
Alguma pista?
UPDATE O problema resolveu facilmente a mudança para o Squid 2.7
Bug do Squid3 aqui
Problema resolvido ao trocar para o Squid 2.7
Eu tenho um projeto semelhante chamado parentwall. Eu resolvi o problema usando o squid -k reconfigure em vez de reiniciar o squid. Você pode fazer o mesmo com os scripts rc.
Reiniciar o squid demora uma eternidade e é desnecessário recarregar a lista branca.
Apenas uma ideia, mas pode ser mais fácil fazer um redirecionamento de javascript. Então, ao invés de tentar fazer um redirecionamento com PHP, simplesmente retorne uma página que tenha algum javascript.
É um pouco menos elegante, mas provavelmente será mais fácil.