quarta-feira, 20 de janeiro de 2010

Limitando a banda no download de arquivos no Apache 2.0

Muitas vezes, precisamos limitar o download de arquivos em nosso servidor Apache principalmente quando os arquivos são grandes. Grandes sites especializados em downloads consequentemente possuem algum tipo de limitação de banda. Não existindo esta limitação, uma série de problemas irão aparecer, como o congestionamento do site, sobrecarga de processos/threads no servidor e por aí vai.
Hoje, tive a necessidade de implementar uma limitação para o download dos arquivos numa ferramenta que desenvolvi para download de arquivos.
Após algumas pesquisas, cheguei a uma solução interessante, onde há um tipo de restrição para usuários locais e outra para usuários externos.

Continuar lendo...


Utilizando o mod_cband para o Apache 2.2, é possível limitar de diversas maneiras o download:

  • Por usuário.
  • Por destino.
  • Por servidor virtual.
Também é possível impor outros limites:
  • Banda total utilizada.
  • Velocidade máxima de download.
  • Número máximo de requisições por segundo.
  • Número máximo de conexões simultâneas por IP.
No meu caso, apenas a limitação por destino já foi suficiente para resolver meu problema. Foi necessário criar uma classe para a rede interna e configurá-la no host virtual.

Não vou descrever o processo de compilação e instalação do módulo. Há diversos tutoriais na internet mostrando como fazê-lo. No próprio código fonte do módulo, há o procedimento sobre como fazê-lo. Em vez disso, posto aqui como exemplo a configuração que utilizei:

--- 8< ---

LoadModule cband_module modules/mod_cband.so
[Location /cband-status]
SetHandler cband-status
Order allow,deny
Allow from 172.16.16.1/32
[/Location]

[CBandClass admlan_class]
CBandClassDst 172.16.16.0/24
[/CBandClass]

[CBandClass usrlan_class]
CBandClassDst 192.168.0.0/16
[/CBandClass]
[VirtualHost 172.16.16.254:80]
ServerAdmin root@localhost.localdomain
DocumentRoot /var/www/html
ServerName localhost.localdomain
ErrorLog logs/localhost.localdomain-error_log
CustomLog logs/localhost.localdomain-access_log common
CBandSpeed 1Mbps 30 60
CBandScoreboard /var/www/scoreboard
CBandRandomPulse On
CBandClassRemoteSpeed admlan_class 20kb/s 10 20
CBandClassRemoteSpeed usrlan_class 15kb/s 10 20
CBandRemoteSpeed 10kb/s 10 20
CBandPeriod 1W
[/VirtualHost]
--- >8 ---

Acima criei 2 classes para usuários internos (usuários que administram os servidores e outra para os demais usuários internos). Os usuários externos caem na excessão às classes (CBandRemoteSpeed).

Feitas as configurações, basta apenas reiniciar o serviço do apache e testar.

No exemplo acima, também é possível monitorar quais transferências estão acontecendo através da url http://[seu-servidor]/cband-status.

Como é possível verificar o procedimento completo, desde a instalação até a configuração, é muito simples.

Outros exemplos de implementação também podem ser vistos nos arquivos que compõem a documentação do módulo.

Fica aí a dica.

Nenhum comentário: