TLDR: 302, 307 e as páginas de erro estão sendo armazenadas em cache. Precisa forçar uma atualização do conteúdo.
Versão longa: configurei uma instância de lula muito pequena em execução em um gateway que não deveria fazer cache de QUALQUER COISA, mas precisa ser usada apenas como um filtro da Web baseado em domínio. Estou usando outro aplicativo que redireciona usuários não autenticados para o proxy que, em seguida, usa a opção deny_info redireciona qualquer pedido não listado na lista de permissões para a página de login. Depois que o usuário autentica a regra de firewall, ela é colocada de forma que ela não seja mais enviada ao proxy.
O problema é que, quando um usuário acessa um site (xkcd.com), ele não é autenticado, sendo redirecionado pelo firewall:
iptables -A unknown-user -t nat -p tcp --dport 80 -j REDIRECT --to-port 39135
para o proxy neste ponto o squid redireciona o usuário para a página de login usando um 302 (eu também tentei 307, e eu também me certifiquei de que os cabeçalhos estão configurados como no-cache e / ou no-store para Cache-Control e Pragma). Então, quando o usuário faz o login no sistema, ele obtém a regra de firewall, que não mais os direciona para o proxy do squid. Mas se eles forem novamente para o xkcd.com, eles terão a página de redirecionamento original armazenada em cache e, mais uma vez, obterão a página de login.
Alguma ideia de como forçar esses redirecionamentos a NÃO serem armazenados em cache pelo navegador? Talvez este seja um problema com os navegadores e não o squid, mas não tenho certeza de como contornar isso.
Configuração completa do squid abaixo.
#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 192.168.182.0/23 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl https port 443
acl http port 80
acl CONNECT method CONNECT
#
# Disable Cache
#
cache deny all
via off
negative_ttl 0 seconds
refresh_all_ims on
#error_default_language en
# Allow manager access only from localhost
http_access allow manager localhost
http_access deny manager
# Deny access to anything other then http
http_access deny !http
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !https
visible_hostname gate.ovatn.net
# Disable memory pooling
memory_pools off
# Never use neigh cache objects for cgi-bin scripts
hierarchy_stoplist cgi-bin ?
#
# URL rewrite Test Settings
#
#acl whitelist dstdomain "/etc/squid/domains-pre.lst"
#url_rewrite_program /usr/lib/squid/redirector
#url_rewrite_access allow !whitelist
#url_rewrite_children 5 startup=0 idle=1 concurrency=0
#http_access allow all
#
# Deny Info Error Test
#
acl whitelist dstdomain "/etc/squid/domains-pre.lst"
deny_info http://login.domain.com/ whitelist
#deny_info ERR_ACCESS_DENIED whitelist
http_access deny !whitelist
http_access allow whitelist
http_port 39135 transparent
## Debug Values
access_log /var/log/squid/access-pre.log
cache_log /var/log/squid/cache-pre.log
# Production Values
#access_log /dev/null
#cache_log /dev/null
# Set PID file
pid_filename /var/run/gatekeeper-pre.pid