Eu não acho que você será capaz de fazer isso apenas no Apache.
Existem alguns módulos do Apache que limitam a largura de banda , mas eu não acho qualquer um deles corresponderá ao que você descreveu.
O mod_bw pode limitar a largura de banda com base em várias partes do pedido. Ele pode limitar com base no endereço IP, extensão do arquivo, tipo mime, tamanho do arquivo e diretório (com base na minha leitura de os documentos ). Você atinge a limitação baseada em diretório colocando as diretivas do módulo dentro de um bloco <Directory >
, portanto, espero que funcionem tão bem dentro de um bloco <Location >
. mod_bwshare parece estar dentro dos blocos <Directory >
e <Location >
também.
A configuração desses módulos do Apache vai para a sua configuração do Apache e eles não procuram valores de qualquer fonte externa, o que significa que você terá que reiniciar o Apache para alterar qualquer um dos valores. Se você quiser limitar a largura de banda apenas depois que um cliente ultrapassar sua cota, será necessário editar os arquivos de configuração do Apache e reiniciar o Apache sempre que algum deles o fizer e o fizer novamente quando o uso da cota expirar.
O jeito que eu faria isso é escrever um pequeno aplicativo em qualquer idioma que aceite um pedido de um arquivo, verificar no banco de dados se o cliente está acima da cota e, em seguida, enviar o arquivo em qualquer taxa apropriada . O cara que escreveu mod_bw explicou como ele conseguiu o afogamento: ele simplesmente divide o arquivo em pequenos "pedaços" (digamos 5KB por pedaço) e então tem um curto sleep()
entre ecoar cada pedaço para o cliente.
Eu usaria então mod_rewrite
para fazer com que as solicitações de arquivos originais (que você disse pareçam com /customer1/page1
) traduzissem em algo como /throttle.php?customer=customer1&file=page1
.
O aplicativo pode gravar no banco de dados no início do download para indicar que está processando um arquivo no momento e, novamente, no final, para indicar que está finalizado. Isso deve permitir que você evite que um cliente monopolize todos os seus filhos do Apache.