Ziproxy - Proxy de compactação e redução de imagens

Em raros casos o gargalo se encontra entre o servidor de internet e o cliente. O ziproxy é um software que ajudará você a compactar e reduzir drasticamente o tamanho de arquivos (html, texto e imagens) antes de enviar para o cliente no link reduzido (discado por exemplo).

[ Hits: 58.210 ]

Por: Patrick Brandao em 31/07/2006 | Blog: http://www.patrick.eti.br


Instalação e configuração (ziproxy.conf)



Instalar o ziproxy não tem segredo, siga os passos abaixo:

# cd /usr/local/src
# wget
http://ufpr.dl.sourceforge.net/sourceforge/ziproxy/ziproxy-2.0.0.tar.bz2
# bunzip2 ziproxy-2.0.0.tar.bz2
# tar xf ziproxy-2.0.0.tar
# cd ziproxy-2.0.0
# ./configure --prefix=/usr --with-cfgfile=/etc/ziproxy.conf
# make
# make install


Baixe o rc.ziproxy, esse script serve para controlar o serviço (iniciar/parar).

# wget www.patrick.eti.br/software/scripts/rc.ziproxy
# mv rc.ziproxy /etc/rc.d/
# chmod +x /etc/rc.d/rc.ziproxy


Iremos agora configurar o ziproxy, não há nada de difícil entendimento e são poucas linhas, veja cada uma das opções bem explicadas abaixo.

Edite o arquivo /etc/ziproxy.conf (se não existir, crie) e informe suas opções.
  • Port
    Porta tcp onde o ziproxy irá esperar por pedidos e conexões http. Ex.:

    Port = 8081

  • OnlyFrom (opcional)
    Rede ou ip que terá permissão para se conectar ao ziproxy. Essa opção não é declarada por padrão, assim o ziproxy aceita conexões de qualquer host. Proteja o acesso ao ziproxy através do firewall Linux iptables. Ex.:

    ONlyFrom = "192.168.0.0/16"

  • NetdTimeout
    Define o tempo em segundos que o ziproxy ficará em execução esperando por conexões antes de se fechar. Essa opção não é boa. Recomendo deixar como 0 (zero), assim ele sempre ficará em execução. Ex.:

    NetdTimeout = 0

  • LogPipe (opcional)
    Define o programa e os parâmetros do programa para o qual o ziproxy enviará as saídas de log antes de gravá-las no arquivo de log. Ex.:

    LogPipe ={"bzip2", "-9cq", "-"}

  • LogFile (opcional)
    Define o arquivo de log do ziproxy (que suporta variáveis de tempo para auto-rotação). Recomendo não definir esta opção. Ex.:

    LogFile = "%j-%Y.log"

  • AccessLogFileName (opcional)
    Define o arquivo de log de acesso (parecido com Squid). Ex.:

    AccessLogFileName = "/var/log/ziproxy/access.log"

  • PasswdFile (opcional)
    Define o arquivo de usuários e senhas para acesso ao proxy. O login e a senha devem estar na mesma linha separados por dois pontos (:) sem espaço. A senha não pode ser criptografada. Ex.:

    PasswdFile="/usr/local/ziproxy/ziproxy.passwd"

  • NextProxy e NextPort (opcional)
    Define o ip e a porta do próximo proxy. Essa opção permite que o ziproxy seja integrado com o Squid. Dessa maneira o Squid faz o cache e o ziproxy compacta antes de enviar para o usuário. Ex.:

    NextProxy="127.0.0.1"
    NextPort=8080

  • TransparentProxy (opcional)
    Ativa o suporte a proxy transparente. Se não estiver ativo, o ziproxy aceitará somente conexões diretas a ele. Ex.:

    TransparentProxy = true

  • ViaServer (opcional)
    Se ativado, o ziproxy enviará o cabeçalho "Via" para impedir loops. Ex.:

    ViaServer = "something"

  • ZiproxyTimeout
    Define o tempo em segundos que o ziproxy irá aguardar pela resposta do host remoto antes de desistir. Ex.:

    ZiproxyTimeout = 120

  • MaxSize
    Define o tamanho máximo em bytes dos arquivos que serão processados pelo ziproxy. Se um arquivo for maior que o tamanho especificado, o ziproxy apenas o encaminhará ao cliente. Ex.:

    MaxSize = 4194304

  • MinTextStream
    Define o tamanho em bytes que serão armazenados compactados na memória antes de iniciar o envio ao cliente. Ex.:

    MinTextStream = 20000

  • UseContentLength
    Define se será usado o cabeçalho ContentLength que define o tamanho do arquivo a ser enviado. Ex.:

    UseContentLength = false

  • Compressible
    Define os tipos a serem compactados pelo ziproxy. O tipo é definido no cabeçalho ContentType, por exemplo: application/x-shockwave. Ex.:

    Compressible = {
            "shockwave", "msword", "msexcel", "mspowerpoint", "rtf", "postscript",
            "java", "javascript", "staroffice", "vnd.", "futuresplash",
            "asp", "class", "font", "truetype-font", "php", "cgi", "executable",
            "shellscript", "perl", "python", "awk", "dvi"
    }

  • ProcessJPG
    Define se o ziproxy irá comprimir imagens JPEG. Ex.:

    ProcessJPG = true

  • ProcessPNG
    Define se o ziproxy irá comprimir imagens PNG. Ex.:

    ProcessPNG = true

  • ProcessGIF
    Define se o ziproxy irá comprimir imagens GIF. Ex.:

    ProcessGIF = true

  • AllowLookChange
    Define se o ziproxy irá comprimir imagens GIF que contenham transparência ou animação. Recomendável desativar, assim o ziproxy não prejudicará esses GIF's. Ex.:

    AllowLookChange = true

  • PreemptNameRes, PreemptNameResMax e PreemptNameResBC
    Define se o ziproxy irá adiantar a resolução de nomes FQDN contidos em textos HTML processados. Esse recurso é interessante quando se deseja manter um cache de dns rico. Por padrão essas opções não são usadas. Ex.:

    PreemptNameRes = false
    PreemptNameResMax = 50
    PreemptNameResBC = true

  • ImageQuality
    Define em quantos por cento as imagens serão compactadas. Os valores podem variar de 0 a 100, ou -1 a -100. Os quatro números são usados da seguinte maneira:

    Para imagens com menos de 5000 pixels.
    Para imagens entre 5000 e 50000 pixels ou uma dimensão é menor de 150 pixels.
    Para imagens entre 50000 e 250000 pixels.
    Para imagens com mais de 250000 pixels.

    O tamanho em pixels definido acima é calculado pelo ziproxy considerando with x height. A qualidade é baseada na cor. Valores negativos definem em quanto a qualidade será subtraída. Se estiver -10 e a imagem atualmente for 90, o resultado será 80. Ser o valor for definido como 0 (zero), a imagem não será alterada. Caso o parâmetro ImageQuality seja omitido, o ziproxy irá considerar 75 para os quatro parâmetros. Ex.:

    ImageQuality = {20,15,15,15}

  • JP2Rate
    Define a qualidade de compressão de imagens JP2, os quatro valores seguem a mesma regra do parâmetro acima. Ex.:

    JP2Rate={0,0.1,0.04,0.03}

  • ModifySuffixes
    Opção reservada para futuras versões, mantenha desativado. Ex.:

    ModifySuffixes = false

  • (Erros personalizados) (opcional)
    Define os arquivos quem contém a mensagem a ser exibida de acordo com cada erro HTTP. Ex.:

    CustomError400="/var/ziproxy/error/400.html"
    CustomError408="/var/ziproxy/error/408.html"
    CustomError500="/var/ziproxy/error/500.html"
    CustomError503="/var/ziproxy/error/503.html"

Termina aqui o arquivo de configuração explicado. No meu caso tenho o Squid rodando no mesmo servidor, na porta 8080. Irei executar o ziproxy na porta 8081. Meu ziproxy.conf segue abaixo:

Port = 8081
NetdTimeout = 0
NextProxy="127.0.0.1"
NextPort=8080
TransparentProxy = true
ZiproxyTimeout = 120
MaxSize = 4194304
MinTextStream = 20000
UseContentLength = false
Compressible = {
        "shockwave", "msword", "msexcel", "mspowerpoint", "rtf", "postscript",
        "java", "javascript", "staroffice", "vnd.", "futuresplash",
        "asp", "class", "font", "truetype-font", "php", "cgi", "executable",
        "shellscript", "perl", "python", "awk", "dvi"
}
ProcessJPG = true
ProcessPNG = true
ProcessGIF = false
ImageQuality = {20,15,15,15}
JP2Rate={0,0.1,0.04,0.03}
ModifySuffixes = false

Agora, vamos iniciar o ziproxy:

# /etc/rc.d/rc.ziproxy start

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Softwares necessários
   3. Instalação e configuração (ziproxy.conf)
   4. Implementando e testando
   5. Conclusão
Outros artigos deste autor

Acelerador de conexões dial-up para provedores de acesso

Qmail e chkuser - fila de mensagens limpa

Gateway de email com Qmail - proteção antivírus e antispam

Anti-SPAM ASK - Válidando remetentes por confirmação de mensagens

NoCatAuth - Construindo um firewall/gateway autenticado

Leitura recomendada

Ferramentas úteis para diagnóstico da rede

Apache 2 para Debian

CBQ sem medo

Replicação e balanceamento de carga em servidores usando DNS

Canal #Vivaolinux com bot interativo

  
Comentários
[1] Comentário enviado por alvaromo em 01/08/2006 - 11:28h

Muito interessante este programa. Show este seu artigo!

[2] Comentário enviado por edsonjbueno em 01/08/2006 - 18:12h

fiz tudo igual esta ai em um debian rc2, mas não navega de jeito algum tambem tenho o squid que esta funcionando blz, confgiurado na porta 3128, e o ziproxy na porta 8081, e configurado no explorer tambem no firefox e nada o conf esta igual a este ai não mudei nada somente a rede claro;... parece que esta faltando dns, mas como, não consegui enteder...

[3] Comentário enviado por patrickbrandao em 02/08/2006 - 08:06h

Olá Edson,

verifique se o software está rodando:
ps ax | grep ziproxy
e verifique também se a porta está aberta:
nmap localhost -p 8081
Se tiver firewall, desative para testar, o dns se configura em
/etc/resolv.conf

[4] Comentário enviado por guilhermerezende em 02/08/2006 - 11:56h

Belo Artigo Patrick!!! Vou tentar usá-lo em provedores wireless cujo acesso contratado seja link de 64K.
Abs.......................

[5] Comentário enviado por edsonjbueno em 03/08/2006 - 02:32h

esta tudo ok, Patrick a porta esta aberta o ziproxy esta em execução na porta 8081 e esta com DNS no resolv.conf, mas nada obrigado pela força...

[6] Comentário enviado por netgate em 03/08/2006 - 12:52h

Patrik nos do forum amamos a liberdade, por que vc nao torna seu MyAuth Gateway software livre e open sorce. Lembre-se que a liberdade so traz o crescimento

[7] Comentário enviado por patrickbrandao em 03/08/2006 - 14:18h

O que o MyAuth tem a vez com o artigo?! Tem soluções iguais a ele gratuitas, chillispot, notcatsplash, entre outros. Softwre livre nem sempre enche conta corrente! Eu contribuo muito com software livre, principalmente documentando, coisa que facilita e insentiva o uso e participação no desenvolvimento.

[8] Comentário enviado por Journeyman em 03/08/2006 - 15:11h

Pena que não tenho mais o meu cyber café powered by linux, senão eu testava,

muito legal esse software!

[9] Comentário enviado por pcnmota em 04/08/2006 - 11:55h

Parabens Patrick, continue ajudando a comunidade. Vc como pesquisador de novas tecnologias ja me ajudou muito com seus artigos.
T+

[10] Comentário enviado por thelinux em 04/08/2006 - 16:20h

Isso mesmo patrickbrandao. Concordo com você venda seu software. O teu artigo já ajudou bastante.

Ou netgat - vc é quem deveria começar a contribuir com algum artigo, dica etc.
Seria uma boa para o software livre.

Parabéns patrickbrandao.

[11] Comentário enviado por cleciorodrigo em 04/08/2006 - 20:17h

Ai concordo o Patrick colabora sim com a comunidade com tutoriais como este, e como ele mencionou ele tem que ganha o dele $$$, neh!

Falow

Clecio

[12] Comentário enviado por mf_alves em 11/08/2006 - 11:32h

Bom pessoal... eu segui os passos certos criei o /etc/ziproxy.conf mas ao tentar rodar o ziproxy deu a seguinte mensagem

Starting Ziproxy /usr/local/bin/ziproxy: error while loading shared libraries: libungif.so.4: cannot open shared object file: No such file or directory
OK

ja tentei procurar via apt mas não encontra a livraria...

estou usando um Debian.. com Squid ja rodando normal.

Caso alguem tenha a resolução do problema ficarei grato....

Obrigado.

[13] Comentário enviado por patrickbrandao em 18/08/2006 - 12:29h

Instala a libungif manualmente!

[14] Comentário enviado por marcosantiago em 23/09/2006 - 00:33h

Galera é o seguinte....
Tenho squid com autenticação rodando numa boa na porta 3128...desativei o squid para fazer o teste com o ziproxy e funcionou, mas quando ativo o squid e o ziproxy...não funciona...coloquei as funções:
NextProxy="127.0.0.1"
NextPort=3128

Mas não foi de jeito nenhum...
Uso o slackware 10.2 ! Se puderem ajudar desde já agradeço...
Ja ia esquecendo !
Parabéns Patrick !

[15] Comentário enviado por patrickbrandao em 25/09/2006 - 18:45h

Tente colocar uma ACL permitindo localhost no squid, e habilite todos os logs e veja no que dá!

Obrigado!

[16] Comentário enviado por drcfilho em 18/10/2006 - 00:40h

me tira uma duvida
se eu coloco a porta 8080 que é a do squid.. o que aconteceria?


Quando vou iniciar:
#etc/rc.d/rc.ziproxy start
Starting Ziproxy /etc/rc.d/rc.ziproxy: line 20: /var/run/ziproxy.pid: Arquivo ou diretório não encontrado
OK

[17] Comentário enviado por drcfilho em 18/10/2006 - 00:51h

resolvi... era só criar um diretorio /run dentro do diretorio /var que iniciou

mas me diga uma coisa.. e se for usado com o seu rc.net? como é que faz?

[18] Comentário enviado por cytron em 16/11/2006 - 17:40h

Legal esse ziproxy, estou testando ele no meu isp wireless, o ziproxy é tão simples que nem precisa de tutorial, o próprio ziproxy.conf já explica tudo. Mas esse guia do Patrick explica melhor do que os termos em inglês no conf.

Parabéns Patrick, se não fosse esse artigo eu nunca teria ouvido falar desse esquema. Eu sempre pensei numa coisa assim, mas jamais pensei que estaria por aí.

Agora estou com uma grande dúvida...

Será que o processamento para compactar no server e descompactar no cliente levaria mais tempo do que usar o squid sem passar pelo ziproxy???

Fiz uns testes aqui... não ví diferença na velocidade, mas ví diferênça na qualidade das imagens.

Ou seja, será que vale apena? Sobrecarregar o servidor fazendo compactação para todos os usuários? Se ao menos a compactação pudesse ser armazenada em cache, pois cada vez que é requisitado o mesmo objeto, o ziproxy comprime tudo denovo! Perda de tempo.

E o ziproxy tá com um bug, desabilitei a compressão de imagens mas ele ainda comprime.

Olhando no squid.conf parece que tem como fazer compressão também... será que é isso mesmo ou eu entendi errado?

A tag é essa: TAG: broken_vary_encoding

Dá uma olhada Patrick!

[19] Comentário enviado por cytron em 26/11/2006 - 19:16h

Poxa! Ninguém respondeu! Será que só eu estou testando o ziproxy?

Tudo bem! Aí vai outra, o zíproxy tá ficando estranho, agora quando dou um ps x para ver os processos, aparecem várias instâncias do ziproxy, "apesar de não ter ninguém navegando". Mas quando dou um stop todas elas somem, se tento matar apenas uma delas com um kill -9 aparecem várias outras. Se dou um start aparecem outra quantidade. Na primeira vez que usei ele estava tudo normal, apenas uma instância. Apesar dele ainda funcionar normal.
Fiz novos testes de desempenho e repito, ainda não ví benefício do uso. Nem mesmo naquela antecipação de resolver ips (50 por default).

ainda não testei o ziproxy em grande escala, nos próximos dias estarei fazendo isso e postarei aqui o resultado.

Vamos lá galera, vamos espremer o ziproxy para ver no que vai dar. Com a revolução da wireless em breve terá muita gente interessado nesse daemon, nosso conhecimento será útil a essas pessoas.

Valeu!

[20] Comentário enviado por patrickbrandao em 27/11/2006 - 14:33h

Olha só, sua duvida nao tem nada a ver com ziproxy, todo software decente que atende clientes em demanda cria um processo PAI e varios processos FILHOS que irão atender cada nova requisição.

Use o pstree para ver isso.

[21] Comentário enviado por pp1rp em 30/03/2007 - 15:09h

Existe um erro no ultimo passo da instalação. Estou usando a distro 9.1 do slackware com squid rodando normalmente. Segue abaixo os erros:
root@px2:/usr/local/src/ziproxy-2.2.1# make
make: *** No targets specified and no makefile found. Stop.
root@px2:/usr/local/src/ziproxy-2.2.1# make install
make: *** No rule to make target `install'. Stop.
root@px2:/usr/local/src/ziproxy-2.2.1# /etc/rc.d/rc.ziproxy start
Starting Ziproxy /etc/rc.d/rc.ziproxy: line 20: /usr/local/bin/ziproxy: No such file or directory
OK
Gostaria da ajuda de voceis para resolver esse problema.
Obrigado.

[22] Comentário enviado por cytron em 06/04/2007 - 13:02h

Estranho! Este erro é porque o make não está encontrando o Makefile, verifique se existe o arquivo Makefile (sem extensão), caso não exista ele foi apagado, baixe novamente o pacote que tudo vai dar certo. Mas não pega desse link que o Patrick tá mostrando não, vai direto na página do projeto que tem versão nova lá, a minha é a 2.1.1

[23] Comentário enviado por cytron em 06/04/2007 - 13:22h

Xiiiii!!! Prometi postar o resultado do meu teste com o ziproxy e acabei esquecendo, mas aqui está:

Não foi muito satisfatório, isso porque não agilizou significamente a ponto de valer a pena, talvez o motivo não seja o ziproxy, mas fora isso... Vários sites contendo flash começaram a dar problemas, devido a compactação do flash algumas vezes acontecia algum erro na compactação fazendo com que o flash não abrisse, o erro foi mais visível em sites bancários, após reiniciar o ziproxy o conteúdo em flash funcionava algumas horas, mas depois começava a não abrir novamente, bastava reiniciar o ziproxy pra tudo voltar ao normal.

Mesmo desabilitando a compressão de imagens ainda assim o ziproxy fazia compressão.

A resolução de nomes funcionou normalmente.

Para resumir, a minha opinião:

O ziproxy é uma excelente idéia e um grande recurso, no entanto, ainda está muito novinho, precisa amadurecer e quem sabe lá na versão 3 já esteja pronto para um mercado mais exigente.

O que eu fiz?

Proxy/cache transparente na porta 80
Ziproxy na porta 8080

Uma vez por mês envio um e-mail para meus clientes avisando que opcionalmente, podem configurar no navegador o proxy para a porta 8080 usufruindo assim da navegação compactada para maior velocidade.
Explico os possíveis problemas, as vantagens e tudo mais.

Resultado:

Os clientes estão satisfeitos por terem a opção de navegação acelerada, responderam a uma pesquisa para dizer se a aceleração era satisfatória, 70% disseram que sim.

É isso aí pessoal, qualquer dúvida pode dizer.

Aviso: Dificilmente vou passar por este artigo novamente, por tanto, se quiser falar comigo, me mande uma mensagem.

[24] Comentário enviado por mdajesus em 26/10/2007 - 20:06h

se puderem disponibilizar o rc.zipproxy fico agradecido pois o link pra baixar esta quebrado. obrigado.

[25] Comentário enviado por lopeston em 27/10/2007 - 01:43h

olá amigo, isso compensa usar em um server banda larga ? wireless ? com conexoes de 256 e 512k ? ou nao da muita diferenca ? muito obrigado, otimo tópico.
abraços

[26] Comentário enviado por buzaneli em 06/12/2007 - 23:47h

olá boa noite
eu tenho um servidor debian etch rodando o squid 2.6 uma beleza

instalei o ziproxy, está tudo certo como vc esplicou o dns está funcionado o ziproxy abriu a porta 8080, mas quando eu coloco no navegador mozila, o endereço do ziproxy, eu digito um site qualquer não aparece pagina nenhuma no meu navegado ela fica em branco, e no log do ziproxy ele diz que já acessou a pag vc pode me explicar o porque disso???

[27] Comentário enviado por martoss em 20/12/2007 - 09:53h

Nao consegui o rc.ziproxy start pois o link do artigo está quebrado, segui todos os passos e não deu nenhum erro, parei neste ponto, por não encontrar o script de inicializacao, se alguem puder me ajudar, favor mandar para martoss@hotmail.com.

Marinho


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts