Você está na página 1de 8

Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?

codigo=11846

Proxy reverso com Apache + cache + compactação + estatísticas


Autor: Diego Oliveira da Silva <dioldasi at uol.com.br>
Data: 07/08/2010

Introdução

Nesse artigo vou explicar passo-a-passo como instalar e configurar um proxy reverso usando Apache com
cache, compactação e estatísticas.

Entendo um Proxy Reverso


Instalação e configuração do Apache
Configuração de Cache
Configuração de compactação
Instalação e configuração do awstats para Estatísticas
Considerações finais

Entendo um proxy reverso


Para quem não sabe um proxy reverso faz exatamente o que diz o nome, ele serve como uma ponte para o
que está atrás do proxy, como mostrado na figura abaixo.

Como podemos entender na imagem acima, quando um usuário quer acessar um serviço do Web Server
por exemplo, ele passa pelo proxy reverso, que faz a requisição para o Web Server e depois repassa a
informação para o usuário. Assim sendo, sempre que existir um proxy reverso antes do Web Server ou
qualquer outro tipo de servidor de serviço, o usuário sempre irá falar e somente falará com o proxy
reverso, que então irá fazer toda as requisições ao servidor de serviço.

Agora que sabemos o que é um proxy reverso, vamos ao trabalho.

Instalação e configuração do Apache

Vou usar o CentOS x64 como base. Vamos instalar o Apache 2.2.3:

1 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

# yum install httpd.x86_64 httpd-devel.x86_64

Apache instalado, vamos a configuração.

Vou apenas falar sobre as configurações de proxy reverso.

Para melhor ilustrar vou criar o seguinte cenário:

Site principal da empresa = www.nossoproxy.com.br


Site de um sistema chamado SOS da empresa = sos.nossoproxy.com.br
Site de outro sistema chamado ONLINE da empresa = online.nossoproxy.com.br

A ideia é fazer com que todos os serviços da empresa passem a funcionar somente pelo site principal, o
www.nossoproxy.com.br.

Após a configuração ficará assim:

Para acessar o sistema SOS www.nossoproxy.com.br/sos


Para acessar o sistema ONLINE www.nossoproxy.com/online

# vi /etc/httpd/conf/httpd.conf

Verifique se as seguintes linhas estão descomentadas, sem '#' a frente:

LoadModule rewrite_module modules/mod_rewrite.so


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

Acredito que por padrão já devem estar descomentadas.

Vamos adicionar as seguintes linhas ao final do arquivo:

<VirtualHost *:80>
<IfModule mod_proxy.c>
####COMPACTAÇÃO####
<IfModule mod_headers.c>

ProxyPreserveHost Off
<Proxy "http://sos.nossoproxy.com.br">
RequestHeader set Host sos.nossoproxy.com.br
</Proxy>

ProxyPass /sos http:// sos.nossoproxy.com.br/sos


ProxyPassReverse /sos/ http://www.nossoproxy.com.br/sos/
</IfModule>

<IfModule mod_headers.c>

ProxyPreserveHost Off

2 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

<Proxy "http://online.nossoproxy.com.br">
RequestHeader set Host sos.nossoproxy.com.br
</Proxy>

ProxyPass /online http://online.nossoproxy.com.br/online


ProxyPassReverse /online/ http://www.nossoproxy.com.br/online/
</IfModule>

<IfModule mod_headers.c>

ProxyPreserveHost Off

<Proxy "http://www.nossoproxy.com.br">
RequestHeader set Host www.nossoproxy.com.br
</Proxy>

ProxyPass / http://www.nossoproxy.com.br/
ProxyPassReverse / http:// www.nossoproxy.com.br
</IfModule>
### CACHE###
</IfModule>
</VirtualHost>

Salvar e feche.

Reinicie o Apache:

# service httpd restart

Apache configurado, agora vou explicar cada item:

<IfModule mod_headers.c>
</IfModule>

Dentro dele você pode fazer configuração de proxy que modifica o header da requisição. Necessário
quando o servidor que você queira se conectar solicita o Host Header.

RequestHeader set Host Modifica o Host Header, assim você pode se conectar no Web Server através de
nome.

ProxyPass pega o que o usuário digita após a primeira / (ela também está incluída) e direciona para um
endereço. Sendo que isso é em direção ao servidor proxy. Exemplo: www.nossoproxy.com.br/sos

O ProxyPass vai pegar o /sos e se conectar em http://sos.nossoproxy.com.br/sos.

ProxyPassReverse altera ou mantém o que vem após a primeira / (ela também está incluída) e direciona
para um endereço. Sendo que isso é em direção ao usuário (reverso).

Pronto! Próximo passo.

3 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

Configuração de cache

Coloque as informações abaixo de onde está escrito ###CACHE###:

<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /var/spool/httpd
CacheDirLevels 5
CacheDirLength 4
CacheMinFileSize 1024
CacheMaxFileSize 10485760
CacheDefaultExpire 144000
</IfModule>

Essas são as minhas configurações, cada um deve fazer a sua. Vou explicar cada item.

CacheEnable disk /, aqui diz que irá fazer cache de tudo que é possível fazer.

CacheRoot, diretório onde os arquivos do cache serão salvos, não esquecer de dar permissão ao usuário
apache:

# chown apache:apache -R "diretório"

CacheDirLevels, quantidade de níveis de diretórios do CacheRoot.

Exemplo: /var/spool/httpd/1111/2222/3333/4444/5555

CacheDirLength, quantidade de caracteres dos nomes de diretórios. Teoricamente quanto menor, mais
rápido vai ser a busca do cache no disco.

CacheMinFileSize, tamanho mínimo em byte do arquivo a ser pego para o cache.

CacheMaxFileSize, tamanho máximo em byte do arquivo a ser pego para o cache.

CacheDefaultExpire, tempo em segundos para o arquivo ser mantido em cache.

Próxima etapa.

Configuração de compactação

Coloque as informações abaixo de onde está escrito ###COMPACTAÇÃO###:

<IfModule mod_deflate.c>

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-


javascript application/xml application/xhtml+xml "application/x-javascript \n\n" "text/html \n\n"
DeflateCompressionLevel 9
</IfModule> ## COLOQUE NA LINHA ANTERIOR AO </VirtualHost>

Vamos as explicações:

AddOutputFilterByType DELATE, diz que vai compactar os tipos de arquivos que estiverem saindo do

4 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

proxy.

Os arquivos que configurei são a grande maioria de tipos de arquivos que compreendem hoje a internet.
Vale informar que não configurei arquivos de imagem, já que na maioria das vezes elas já estão
compactadas e seu ganho seria pequeno e o processamento iria aumentar bastante.

DeflateCompressionLevel 9, nível de compactação dos arquivos, varia de 1 até 9, quanto maior, maior a
compactação e processamento.

Instalação e configuração do awstats para estatísticas

Pelo que tem no mercado hoje, esse foi o melhor software livre que encontrei que gera estatísticas através
do log do Apache.

Baixar o arquivo do site:

http://awstats.sourceforge.net/#DOWNLOAD

Baixando:

# wget http://awstats.sourceforge.net/files/awstats-7.0.tar.gz

Descompactando:

# tar -zvf awstats-7.0.tar.gz

Entre do diretório awstats-7.0/tools:

# cd awstats-7.0/tools

Instalando:

# perl awstats_configure.pl

Siga a instalação normalmente.

Dentro do seu httpd.conf foi inserido novas linhas, vamos dar um pouco mais de segurança a página de
estatísticas.

Adicione as linhas que estão em negrito. Meu local de instalação das páginas é /var/www/html:

<VirtualHost *:8080>

#
# Directives to allow use of AWStats as a CGI
#

Alias /awstatsclasses "/var/www/html/awstats-7.0/wwwroot/classes/"


Alias /awstatscss "/var/www/html/awstats-7.0/wwwroot/css/"
Alias /awstatsicons "/var/www/html/awstats-7.0/wwwroot/icon/"

ScriptAlias /awstats/ "/var/www/html/awstats-7.0/wwwroot/cgi-bin/"

5 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

#
# This is to permit URL access to scripts/files in AWStats directory.
#

<Directory "/var/www/html/awstats-7.0/wwwroot">
Options FollowSymLinks Indexes
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

Feche e salve.

Vamos alterar o arquivo de configuração do awstats:

# vi awstats/awstats.www.nossoproxy.com.br.conf

Localize a linha:

LogFormat=

Altere para:

LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %deflateratio %refererquot


%uaquot"

Agora vamos alterar o arquivo de configuração do Apache:

# vi /etc/httpd/conf/httpd.conf

Localize a linha LogFormat. Verifique se a configuração está assim:

LogFormat "%h %l %u %t \"%r\" %>s %b (%{ratio}n) \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

Para que isso? Para que o awstats consiga pegar os informações necessárias do log do Apache.

Localize a linha Listen. Adicione a seguinte linha:

Listen seuip:8080

Salve e feche.

Vamos agora configurar com que frequência o awstats vai ler o log do Apache para buscar informações
para gerar as estatísticas.

# crontab -e

Adicione as seguintes linhas:

## ATUALIZA ESTATISTICA A CADA 2 MIN

6 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

00-59/2 * * * * /var/www/html/awstats-7.0/wwwroot/cgi-bin/awstats.pl -update


-config=www.nossoproxy.com.br

Salve e feche.

Com essa configuração o script de atualização irá executar a cada 2 minutos todos os dias.

Pronto, está configurado o awstats, para acessar basta ir em:

www.nossoproxy.com.br:8080/awstats/awstats.pl?config=www.nossoproxy.com.br

Configure o hosts:

# vi /etc/hosts

Inserir as linhas:

seuip sos.nossoproxy.com.br
seuip online.nossoproxy.com.br

Salve e feche.

Finalizando...

Alterar nome do servidor para www.nossoproxy.com.br:

# vi /etc/sysconfig/network

Altere para:

HOSTNAME=www.nossoproxy.com.br

Considerações finais

A pergunta que não quer calar, por quê Apache?

Testei o poderoso Varnish, realmente ele parece ser muito bom (globo.com usa), mas infelizmente cheguei
em um ponto que precisava de ajuda e não tive, a documentação é muito pobre ainda e tive certa demora
com o uso de tickets no site deles.

Pensei também no ngnix, mas achei que teria o mesmo problema do Varnish. Então vamos de Squid, ele
deixou a desejar em certas configurações que não consegui fazer. Um ponto muito positivo do Apache é a
vasta documentação.

Fiz testes durante 2 semanas utilizando cache de disco, cache de memória e sem cache, posso afirmar que
o cache de disco obteve o melhor desempenho em conjunto com a compactação nível 9.

Espero ajudar a todos com esse meu primeiro artigo.

7 de 8 05/12/2010 21:13
Proxy reverso com Apache + cache + compactação + estatísticas [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11846

http://www.vivaolinux.com.br/artigo/Proxy-reverso-com-Apache-+-cache-+-compactacao-+-estatisticas

Voltar para o site

8 de 8 05/12/2010 21:13

Você também pode gostar