Pare o cache do squid 302 e 307 com deny_info

2

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
    
por 0xception 23.10.2012 / 02:58

1 resposta

0

Eu acredito que eu possa ter encontrado uma solução para isso. Depois de dias e dias tentando descobrir, apenas através de um tropeço aleatório eu encontrei

client_persistent_connections off
server_persistent_connections off

Isso funcionou. Então não era tanto cache como era uma única conexão persistente bagunçando as coisas. W000T!

    
por 23.10.2012 / 19:33