O
Squid vai fazer o papel de "servidor web", recebendo as requisições da internet na porta 80 e repassando-as para os servidores web REAIS. Caso o Squid tenha a página solicitada em CACHE, os servidores WEB REAIS não recebem a requisição, simplesmente o SQUID que responde. :)
O
/etc/squid/squid.conf fica assim:
#Lista na porta 80 e o site padrão sera www.meusite.com.br caso a requisição não tenha um header Host especificado.
http_port 200.200.200.1:80 vhost defaultsite=www.meusite.com.br
#Lista porta 3401 para requisições SNMP, caso não queira obter informações do squid via SNMP, coloque 0 no lugar da porta, você pode usar cacti, mrtg, rrdtool para gerar estatísticas do Squid, são gerados gráficos bem interessantes.
snmp_port 3401
#Não usaremos este protocolo de comunicação entre proxies, pois temos apenas 1 proxy.
icp_port 0
#Configurando a pasta de cache, 20GB, primeiro nível com 32 pastas e cada pasta terá 256 sub-pastas.
cache_dir aufs /var/spool/squid 20000 32 256
#Mantendo objetos recentes e pequenos na memoria
memory_replacement_policy heap GDSF
#Mantendo objetos recentes no disco (independente do tamanho)
cache_replacement_policy heap LFUDA
#Ativando pools de memoria, evitando o Squid ficar realocando memoria toda hora que precisar, manterá pools de 32MB
memory_pools on
memory_pools_limit 32 MB
#Não fazer cache de paginas dinâmicas
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
#Fazer cache dos headers 'vary'
cache_vary on
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#memoria alocada para objetos em TRANSITO
cache_mem 128 MB
#Manutenção do cache
cache_swap_low 90
cache_swap_high 95
#Tamanho máximo de objetos que serão gravados em disco/memoria, este valor varia de acordo com cada tipo de conteúdo servido pelos servidores WWW, se você servir arquivos muito grandes, aumente de acordo com a necessidade.
maximum_object_size 4 MB
#Tamanho minimo de objetos gravados, aqui ele vai gravar TUDO
minimum_object_size 0 KB
#Tamanho máximo de objetos mantidos na memoria
maximum_object_size_in_memory 64 KB
#Manter 1024 registros de DNS na memoria
fqdncache_size 1024
#Arquivos de logs
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
emulate_httpd_log on
log_ip_on_direct on
#Configurações extras
mime_table /etc/squid/mime.conf
log_mime_hdrs off
log_fqdn off
ftp_user anonymous@aonze.com.br
ftp_passive on
ftp_sanitycheck on
ftp_telnet_protocol on
check_hostnames on
allow_underscore on
dns_timeout 1 minutes
request_header_max_size 16 KB
#Estas 'refresh_pattern' fazem com que o squid mantenha o máximo possível um objeto em cache, aumentando o cache HIT e byte HIT
refresh_pattern -i \.jpg$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.gif$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.png$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.jpeg$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.bmp$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tif$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tiff$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.swf$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.html$ 0 20% 1440
refresh_pattern -i \.htm$ 0 20% 1440
refresh_pattern -i \.shtml$ 0 20% 1440
refresh_pattern -i \.shtm$ 0 20% 1440
refresh_pattern -i \.mov$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.avi$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.mpg$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.mpeg$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.qtm$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.flv$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.wav$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.au$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.mid$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.mp3$ 2880 100% 21600 reload-into-ims
refresh_pattern -i \.zip$ 7200 50% 21600 reload-into-ims
refresh_pattern -i \.gz$ 0 50% 10080 reload-into-ims
refresh_pattern -i \.arj$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.lha$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.lzh$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.rar$ 7200 50% 21600 reload-into-ims
refresh_pattern -i \.tgz$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tar$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.Z$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.sit$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.pdf$ 7200 50% 10080 reload-into-ims
#O que não bater nas regras acima, recebem valores padrões, NÃO aconselho alterar estas 3 abaixo, e estas devem ser as ULTIMAS regras..
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#Objetos em transito que forem interrompidos, terminar o download se a porcentagem do download for maior que 85%
quick_abort_min 50 KB
quick_abort_max 50 KB
quick_abort_pct 85
#caches de respostas
negative_ttl 3 minutes
positive_dns_ttl 5 hours
negative_dns_ttl 2 minute
#Servidor de DNS, recomendo rodar um servidor dns cache-only na MESMA maquina do Squid, e também colocar forwarders para outros servidores de dns próximos fazendo com que o tempo de resposta dns fique bem baixo..
dns_nameservers 127.0.0.1
#timeouts
refresh_stale_hit 30 seconds
connect_timeout 1 minute
peer_connect_timeout 30 seconds
read_timeout 15 minutes
request_timeout 1 minutes
persistent_request_timeout 1 minute
client_lifetime 1 day
pconn_timeout 30 seconds
ident_timeout 10 seconds
half_closed_clients off
forward_timeout 3 minutes
#tempo de espera antes de matar o processo
shutdown_lifetime 30 seconds
#Regras para acesso, vamos proteger nosso Squid de acessos indevidos, fazendo com que não temos um PROXY OPEN RELAY.
#ip localhost
acl localhost src 127.0.0.1
#ips dos servidores
acl hosted dst 200.200.200.1 192.168.0.1 192.168.0.2 192.168.0.3
#protocolo cache_object, utilizado pelo cache manager
acl manager proto cache_object
acl all src 0.0.0.0/0.0.0.0
#Permitir protocolo para localhost
http_access allow manager localhost
#ninguém mais alem do próprio servidor acessa o cache_object
http_access deny manager
#permite o localhost acesso ao proxy
http_access allow localhost
#permite acesso aos ips dos servidores
http_access allow hosted
#ninguém mais acessa nada que não bater nas regras acima.. deve ser SEMPRE a ultima regra
#CASO for gerar estatísticas snmp, adicionar estas regras
acl snmppublic snmp_community public
snmp_access allow snmppublic localhost
snmp_access deny all
snmp_incoming_address 0.0.0.0
snmp_outgoing_address 255.255.255.255
#### fim do snmp
#respostas http, permitidas todas para todos
http_reply_access allow all
#tamanho máximo do cabeçalho de resposta
reply_header_max_size 10 KB
#informações
cache_mgr hostmaster@meusite.com.br
cache_effective_user squid
cache_effective_user squid
#esconde versão do squid
httpd_suppress_version_string on
#seta o host para www.meusite.com.br caso contrario o squid anexa o hostname da maquina, podendo causar problemas na respostas.
visible_hostname www.meusite.com.br
#manter 10 arquivos de logs
logfile_rotate 10
#usar buffer do sistema, o squid não controla o buffer tcp neste caso..
tcp_recv_bufsize 0 bytes
#mantem ip de origem no header
forwarded_for on
#mantem uma lista de clientes acessando o cache
client_db on
buffered_logs off
#Aplica o header If-modified-since em todos os objetos
reload_into_ims on
#permite conexões persistentes
client_persistent_connections on
server_persistent_connections on
#não permite manter a conexão ativa quando esta for um erro, (404, 500, etc etc).
persistent_connection_after_error off
#detectar conexões permanentes com erro
detect_broken_pconn on
pipeline_prefetch on
ie_refresh on
relaxed_header_parser on
#fazer a entrega aos servidores WEB, aqui que acontece a 'magica'
cache_peer 192.168.0.2 parent 80 0 no-query originserver round-robin
cache_peer 192.168.0.3 parent 80 0 no-query originserver round-robin
#EOF
Salve o squid.conf.
Execute o comando:
# squid -k parse
para validar o squid.conf.
Agora é necessário que o Squid crie a estrutura do cache, execute o comando:
# squid -z
O Squid vai criar a estrutura das pastas no /var/spool/squid.
Adicione o Squid na inicialização do sistema:
# chkconfig --add squid
# chkconfig squid on
Agora inicie o Squid:
# service squid start
Pronto! O Squid vai receber as requisições e repassar (aleatoriamente) para os servidores web.
Uma dica interessante, caso o servidor web 1 seja melhor do que o servidor web 2, você pode definir um PESO na opção cache_dir para que o melhor servidor atenda mais requisições e o servidor 2 atenda um número MENOR. Vamos supor que o www1 suporte 4 vezes mais do que o www2, então ficaria assim:
cache_peer 192.168.0.2 parent 80 0 no-query originserver round-robin weight=4
cache_peer 192.168.0.3 parent 80 0 no-query originserver round-robin weight=1
A cada 4 requisições para o www1, ele manda a 1 para o www2. :)