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).
Parte 3: 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.
# 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"
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
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