O módulo do Apache responsável pela integração entre os 2 serviços é o
proxy_http, que por sua vez depende do
proxy. Então temos que verificar se ambos estão habilitados no Apache.
O comando
a2dismod é usado para desabilitar um módulo ativo do Apache, quando executado sem parâmetros ele mostra a lista dos módulos ativos. Então vamos usá-lo para descobrir quais módulos estão ativos no momento (o que nos interessa é saber se proxy e proxy_http estão ativos ou não):
# a2dismod
Your choices are: alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgi dir env expires headers include mime negotiation php5 rewrite setenvif ssl status suexec z_dir
Which module(s) do you want to disable (wildcards ok)?
Pressione
Ctrl + C para cancelar a operação.
Os módulos que precisamos habilitar são o
proxy e
proxy_http. Se eles não tiverem listados na saída do comando acima, precisamos habilitá-los com o
a2enmod:
# a2enmod
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation php5 proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias
Which module(s) do you want to enable (wildcards ok)?
proxy proxy_http
Pronto, módulos habilitados!
NOTA: Os comandos a2dismod e a2enmod são utilitários providos pelo Debian visando a facilitação do gerenciamento de módulos do Apache. Caso eles não existam em sua distribuição, procure saber como fazer na mão. Tu é nerd, sabe se virar! :)
Configurando o Apache
Agora que temos os módulos de proxy habilitados, vamos configurar o virtualhost do site desejado para direcionar as requisições de conteúdo estático para o Light.
Solução 1
No meu caso, os diretórios que possuem conteúdo estático são:
- /imagens
- /css
- /js
- e alguns outros, mas vou usar somente esses para resumir a configuração.
Então editando o arquivo de configuração do virtualhost, que no meu caso é
/etc/apache2/sites-enabled/vivaolinux.com.br:
# vim /etc/apache2/sites-enabled/vivaolinux.com.br
Faremos:
<VirtualHost www.vivaolinux.com.br>
ProxyPass /imagens/ http://www.vivaolinux.com.br:81/imagens/
ProxyPassReverse /imagens http://www.vivaolinux.com.br:81/imagens
ProxyPass /css/ http://www.vivaolinux.com.br:81/css/
ProxyPassReverse /css http://www.vivaolinux.com.br:81/css
ProxyPass /js/ http://www.vivaolinux.com.br:81/js/
ProxyPassReverse /js http://www.vivaolinux.com.br:81/js
ProxyPreserveHost on
... resto da conf. omitida ...
</VirtualHost>
Ou seja, adicionei as linhas de configuração de proxy no início do virtualhost para evitar que os caminhos sejam tratados por qualquer outro módulo ou parâmetro. Note que para cada diretório foram criadas duas entradas, ProxyPass e ProxyPassReverse, o primeiro com / no final do path e o segundo sem. O que essas linhas fazem é redirecionar a requisição nos diretórios acima para a porta 81 do servidor, que roda o Lighttpd.
Solução 2
A solução 1 possui uma desvantagem. As requisições de arquivos, mesmo sendo tratadas somente pelo Light, são logadas tanto no Apache quanto no Light, o que gera uma duplicação de logs e consequente maior consumo de espaço em disco e I/O.
Na verdade o que fiz foi a combinação da solução 1 e 2. Esta segunda solução trata da criação de um virtualhost exclusivo para conteúdo estático, ou seja, todas as imagens, arquivos css e js serão carregados pelo host
img.vivaolinux.com.br ao invés do tradicional
www.vivaolinux.com.br.
Para tal basta criar um novo virtualhost com a seguinte configuração:
# vim /etc/apache2/sites-enabled/vivaolinux.com.br
(adicionar o novo virtualhost no final do arquivo)
<VirtualHost img.vivaolinux.com.br>
ServerName img.vivaolinux.com.br
ServerAlias img.vivaolinux.com.br
ProxyPass / http://img.vivaolinux.com.br:81/
ProxyPassReverse / http://img.vivaolinux.com.br:81
ProxyPreserveHost on
</VirtualHost>
Ou seja, o virtualhost se resume a redirecionar TUDO de img.vivaolinux.com.br para o Lighttpd.
NOTA: Não se esqueça que é preciso criar o host no servidor de DNS, senão não funciona né!? :P
Mas, nem tudo são rosas, para que esta solução funcione você precisa varrer TODOS os arquivos html do seu site e mudar as ocorrências de:
<img src="/imagens/logotipo01.png">
Para:
<img src="http://img.vivaolinux.com.br/imagens/logotipo01.png">
Convertendo a situação acima para um padrão a se usar com expressão regular, ficaria de:
src="/imagens
Para:
src="http://img.vivaolinux.com.br/imagens
Para automatizar esta tarefa usei o script em Perl
substituir.pl.
Faça um backup de seus arquivos HTML e em seguida execute, na raiz do seu diretório web:
$ ./substituir.pl 'src=..imagens' 'src=\"http:\/\/img.vivaolinux.com.br\/imagens' `find . -name "*.html"`
Substituindo todas as ocorrências de
"src=..imagens" para "src=\"http:\/\/img.vivaolinux.com.br\/imagens"...
Processando teste.html...
... [ OK ]
Substitua os parâmetros acima para os que são válidos para o seu site. O script varrerá todos os seus arquivos html e adaptará as tags de carregamento de imagem de /imagens para http://img.vivaolinux.com.br/imagens.
Este foi só um exemplo de padrão identificado, caso você possua outros padrões de link para conteúdo estático, tal como carregamento de arquivos CSS, JavaScript e até mesmo outros diretórios de imagens, repita o procedimento até chegar ao resultado desejado.
Por fim, caso não tenha entendido bulufas da solução 2, acho melhor se concentrar somente na solução 1. :)
Configurando Expires no Apache
Para modificar a tag Expires no Apache precisamos primeiro habilitar o módulo "
expires":
# a2enmod expires
Em seguida edite seu virtualhost adicionando a seguinte configuração:
ExpiresActive On
<FilesMatch "\.(gif|jpg|jpeg|png|css|js|swf|GIF|JPG|JPEG|PNG|txt|TXT)$">
ExpiresDefault "access plus 1 year"
</FilesMatch>
Note que aqui há um exagero. Se nosso conteúdo estático já está sendo provido pelo Lighttpd e o mesmo já possui a tag Expires habilitada, pra quê habilitar isso também no Apache?
Pois é, neste caso não é necessário, porém como promessa é dívida, eis a forma de configurá-la no Apache. E além disso, caso você esteja lendo esse artigo por curiosidade e não ache necessário instalar o Light, pelo menos otimizar o seu cache pelo índio você pode fazer né? Larga de ser administrador relaxado!
Finalizadas as configurações, vamos reiniciar o Apache:
# /etc/init.d/apache2 restart
NOTA: Se você sabe como configurar o mod_proxy em conjunto com a diretiva <FilesMatch>, a solução ficará bem mais simples. Para isso basta criar um filtro com as extensões de arquivos estáticos e direcioná-las para o proxy. Então se sabe como fazer, deixe-nos tomar conhecimento através de um artigo ou comentando neste.