Como posso limitar a largura de banda do servidor por usuário, não uma página da Web?

1

Gostaria de limitar a velocidade de download dos meus arquivos .flv e meus arquivos .mp4 por usuário no meu domínio. Minha página tem de 1 a 3 a 3 mil visitantes por dia e eles não podem assistir minhas coisas ao mesmo tempo, porque uma ou duas pessoas recebem toda a minha largura de banda.

Eu gostaria de dar 200KiB / s / usuário ...

Se houver 10 ouvintes do meu stream, eles usam 2Mib / s, não 30-40Mib / s ... E eu gostaria de dar a eles um mínimo ..

eu tentei Módulo de largura de banda, mas funciona para domínios, não para usuário ..

BandwidthModule On ForceBandWidthModule On LargeFileLimit .flv 1 204800 LargeFileLimit .mp4 1 204800

Existe algum módulo de fácil instalação do apache? Ou posso limitar apenas as fibras de download? ... Baixe o limite de velocidade por IP ou conexão ...

    
por user1709024 18.02.2013 / 00:08

3 respostas

2

Parece que mod_cband é provavelmente sua melhor aposta. A diretiva CBandRemoteSpeed especificamente limita o número de conexões, conexões por segundo e velocidade de conexão por IP do cliente. Não parece ter uma opção "por tipo de arquivo". De acordo com a documentação, ele é definido por <VirtualHost> , então se você quisesse limitar os arquivos .flv e .mp4, seria necessário movê-los para um virtualhost por conta própria (digamos, streaming.example.com ) e habilitar a cband lá.

    
por 18.02.2013 / 01:37
2

Se não houver uma solução interna do Apache e estamos falando de Linux, pode haver uma opção para fazer isso com a modelagem de tráfego. Tudo o que você precisa é de uma possibilidade de comunicar (rapidamente) fora do Apache que o respectivo processo pertence a um determinado usuário. Talvez você possa reescrever as URLs dos seus arquivos para que o Apache chame um script PHP. O script determinaria o usuário e o ID do processo e gravaria ambos em um "daemon" pequeno (por exemplo, script Python) antes de enviar os dados solicitados. Este daemon adicionaria uma regra iptables com --pid-owner (não funciona mais, veja abaixo: Edit) na tabela mangle e marca o pacote (um número para cada usuário (ativo)).

Você definiria uma classe HTB para cada usuário ativo simultaneamente. Os filtros tc atribuem a cada pacote uma dessas classes, dependendo do nfmark definido pelo iptables. Você pode decidir se essas classes têm 200KiB / s como um limite rígido ou se obtém a largura de banda adicional. Dessa forma, não importa quantas conexões um usuário tenha aberto, o limite é global em relação a todas elas.

De tempos em tempos, o "daemon" teria que verificar se todos os processos ainda existem e excluir as regras para aqueles que foram eliminados.

Editar

Parece que a opção --pid-owner foi removida do iptables. A possibilidade de filtrar com base no usuário ou grupo provavelmente não ajuda. Mas um script PHP sabe o endereço de destino para que ele possa chamar um script com esses parâmetros, o que cria uma regra respectiva.

    
por 18.02.2013 / 01:27
1

Como DerfK já mencionado, mod_cband fará o trabalho rápido e sujo, mas é intensivo em CPU para maior carga de trabalho.

A coisa mágica por trás de um throttling de largura de banda profissional é provê-lo como um serviço separado .

Se você estiver em um ambiente de hospedagem cololado, poderá começar com uma máquina adicional 1HE.

    
por 01.03.2013 / 00:21