Apache: mod_cband e mod_speling

O mod_cband permite limitar o uso de banda ou o número de requisições simultâneas atendidas pelos sites hospedados no Apache. Como você pode imaginar, ele é extremamente popular em serviços de shared hosting, já que permite limitar o volume de banda utilizado por cada site (ou por cada usuário que acessa o servidor) e estabelecer quotas de tráfego.

Nas distribuições derivadas do Debian, ele pode ser instalado através do pacote “libapache2-mod-cband”, como em:

# apt-get install libapache2-mod-cband

Com o módulo instalado, use o comando a2enmod para ativá-lo:

# a2enmod cband

Falta agora apenas editar a configuração de cada virtual host, definindo os limites desejados, como em:

<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName http://www.joao.com.br
ServerAlias joao.com.br
DocumentRoot /var/www/joao
CBandSpeed 1024kbps 10 20
CBandRemoteSpeed 512kbps 5 3

</VirtualHost>

A opção “CBandSpeed” determina os limites para o tráfego total do site, especificando o volume máximo de banda que pode ser usado, o número máximo de requisições de páginas e/ou arquivos por segundo e o número máximo de instâncias do Apache que podem ser utilizadas. No exemplo, limitei o tráfego do site a 1024 kbps, com um máximo de 10 requisições por segundo e um máximo de 20 conexões simultâneas.

Em seguida, temos a opção “CBandremoteSpeed”, que permite definir limites individuais para os visitantes, impedindo que um único usuário monopolize toda a banda disponível (pense no caso de um site que disponibiliza arquivos para download, por exemplo). No exemplo, cada usuário ficará limitado a um máximo de 256 kbps, com até 3 requisições por segundo e um máximo de três conexões simultâneas.

Como acabamos de ativar o módulo, é necessário reiniciar o Apache para que as alterações entrem em vigor, mas, quando você for apenas alterar os limites posteriormente, pode usar o “reload” para atualizar a configuração sem derrubar o servidor.

# /etc/init.d/apache2 force-reload

A partir daí, você pode verificar a aplicação dos limites simplesmente baixando um arquivo disponível no site. A taxa de transferência vai variar ao longo do download, ficando um pouco acima ou um pouco abaixo do estabelecido, mas na média a transferência não ultrapassa a quota estabelecida.

O speling é outro módulo útil e bastante usado. Ele tem a função de corrigir erros simples nos links digitados pelos usuários, encaminhando-os para a página com o nome mais similar, em vez de mostrar um erro 404. Com isso, um visitante que tentar acessar por engano a “http://www.gdhpress.com.br/curso“, por exemplo, será enviado para a “http://www.gdhpress.com.br/cursos“, que é a página com nome mais próximo e possivelmente a que ele desejava acessar.

Além de evitar a perda de algumas visitas, a correção automática das URLs ajuda a reduzir o volume de erros de indexação nos mecanismos de busca, causados por links externos apontando para páginas do site que não existem. Como o conteúdo do site não é duplicado (os visitantes são apenas redirecionados para a página correta, automaticamente), não existe nenhuma contra-indicação no uso do módulo, com exceção de um pequeno aumento na carga de processamento do servidor, proporcional ao volume de correções que ele precisar realizar.

Em praticamente todas as distribuições, o mod-speling é incluído diretamente no pacote principal do Apache, de forma que você precisa apenas ativá-lo.

Nas distribuições derivadas do Debian, use o a2enmod, como em:

# a2enmod speling
# /etc/init.d/apache2 force-reload

Nas derivadas do Red Hat, crie o arquivo “/etc/httpd/conf.d/speling.conf“, contendo a linha:

LoadModule speling_module modules/mod_speling.so

E em seguida reinicie o serviço:

# service httpd restart

Caso, ao reiniciar o Apache, você receber um erro como “[warn] module speling_module is already loaded, skipping”, significa que o módulo já está ativo por padrão. Nesse caso, você pode remover o arquivo, pois ele não é necessário.

Com o módulo ativo, você precisa apenas ativar o uso do speling, incluindo a linha “CheckSpelling on” dentro da configuração do site, como em:

<VirtualHost *:80>
ServerAdmin admin@gdhpress.com.br
ServerName http://www.gdhpress.com.br
DocumentRoot /var/www/gdhpress
CheckSpelling on
</VirtualHost>

Se preferir que o módulo seja usado automaticamente para todos os sites hospedados, inclua a linha diretamente no arquivo de configuração principal do Apache.

O mod_cband permite limitar o uso de banda ou o número de requisições simultâneas atendidas pelos sites hospedados no Apache. Como você pode imaginar, ele é extremamente popular em serviços de shared hosting, já que permite limitar o volume de banda utilizado por cada site (ou por cada usuário que acessa o servidor) e estabelecer quotas de tráfego.

Nas distribuições derivadas do Debian, ele pode ser instalado através do pacote “libapache2-mod-cband”, como em:

# apt-get install libapache2-mod-cband

Com o módulo instalado, use o comando a2enmod para ativá-lo:

# a2enmod cband

No CentOS, é necessário instalar o pacote a partir do código fonte. Comece instalando o pacote “httpd-devel” usando o yum:

# yum install httpd-devel

Em seguida, baixe a versão mais recente do pacote no: http://sourceforge.net/projects/cband/

Para instalar, descompacte o arquivo, acesse o diretório que será criado e rode os comandos “./configure”, “make” e “make install”, como em:

# tar -zxvf mod-cband-0.9.6.1.tgz
# cd mod-cband-0.9.6.1
# ./configure
# make
# make install

O script de instalação se encarrega de instalar o módulo na pasta “/usr/lib/httpd/modules/” e adicionar uma linha similar à linha a seguir no arquivo “/etc/httpd/conf/httpd.conf”, de forma que ele seja carregado:

LoadModule cband_module /usr/lib/httpd/modules/mod_cband.so

Falta agora apenas editar a configuração de cada virtual host, definindo os limites desejados, como em:

<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName http://www.joao.com.br
ServerAlias joao.com.br
DocumentRoot /var/www/joao
CBandSpeed 1024kbps 10 20
CBandRemoteSpeed 512kbps 5 3

</VirtualHost>

A opção “CBandSpeed” determina os limites para o tráfego total do site, especificando o volume máximo de banda que pode ser usado, o número máximo de requisições de páginas e/ou arquivos por segundo e o número máximo de instâncias do Apache que podem ser utilizadas. No exemplo, limitei o tráfego do site a 1024 kbps, com um máximo de 10 requisições por segundo e um máximo de 20 conexões simultâneas.

Em seguida, temos a opção “CBandremoteSpeed”, que permite definir limites individuais para os visitantes, impedindo que um único usuário monopolize toda a banda disponível (pense no caso de um site que disponibiliza arquivos para download, por exemplo). No exemplo, cada usuário ficará limitado a um máximo de 256 kbps, com até 3 requisições por segundo e um máximo de três conexões simultâneas.

Como acabamos de ativar o módulo, é necessário reiniciar o Apache para que as alterações entrem em vigor, mas, quando você for apenas alterar os limites posteriormente, pode usar o “reload” para atualizar a configuração sem derrubar o servidor.

# /etc/init.d/apache2 force-reload

A partir daí, você pode verificar a aplicação dos limites simplesmente baixando um arquivo disponível no site. A taxa de transferência vai variar ao longo do download, ficando um pouco acima ou um pouco abaixo do estabelecido, mas na média a transferência não ultrapassa a quota estabelecida:

Nesse primeiro exemplo, estabelecemos apenas um limite de uso de banda e um número máximo de requisições simultâneas, mas não estabelecemos nenhum limite de tráfego, de forma que o webmaster do site poderia utilizar quanta banda quisesse, ficando restrito apenas ao limite total de 1024 kbps, de forma similar a uma conexão doméstica.

Os 1024 kbps estabelecidos podem parecer pouco, mas se eles forem utilizados 24 horas por dia, 7 dias por semana (pense no caso de um site de downloads), o site consumirá no final do mês um tráfego total de pouco mais de 300 GB. Se o mesmo limite for aplicado a todos os sites hospedados, teremos uma situação onde o acesso por parte dos visitantes será relativamente lento (apenas 512 kbps por visitante) e que não impedirá que os sites que hospedem predominantemente arquivos consumam um volume considerável de banda.

Outra questão importante é que limitando as taxas de download de cada usuário, os downloads demorarão mais tempo, o que fará com que cada instância do Apache fique mais tempo atendendo ao mesmo cliente, aumentando o consumo de memória do servidor.

Devido a essas desvantagens, a restrição com base no uso de banda tem se tornado menos comum, dando lugar a quotas de tráfego. No novo modelo, o site pode consumir quanta banda precisar, desde que não ultrapasse uma determinada quota de tráfego mensal.

Para definir a quota de tráfego, o primeiro passo é criar uma pasta onde o cband armazenará informações sobre o tráfego usado por cada host. Você pode tanto criar uma pasta dentro do diretório do site e restringir o acesso a ela quanto criar uma pasta em outro diretório do sistema. O mais importante é que você ajuste as permissões de acesso, de forma que o dono seja o usuário usado pelo Apache (“www-data” no Debian, ou “apache” no CentOS), como em:

# mkdir /var/www/scoreboard
# chown www-data:www-data /var/www/scoreboard/

ou:
# mkdir -p /var/spool/cband/scoreboard
# chown apache:apache /var/spool/cband/scoreboard

Dentro desse diretório, criamos um arquivo vazio para cada site onde formos ativar o cband, novamente dando a posse para o usuário usado pelo Apache, como em:

# touch /var/www/scoreboard/joao
# chown www-data:www-data /var/www/scoreboard/joao

Em seguida, precisamos alterar a configuração dos sites (dentro da pasta “/etc/apache2/sites-available” ou dentro do arquivo “/etc/httpd/conf/httpd.conf”), especificando a nova configuração, como em:

<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName http://www.joao.com.br
ServerAlias joao.com.br
DocumentRoot /var/www/joao
CBandLimit 100G
CBandPeriod 4W
CBandScoreboard /var/www/scoreboard/joao
CBandExceededURL http://provedor.com/quota_excedida.htm

</VirtualHost>

Como você pode imaginar, a opção “CBandLimit” especifica a quota de tráfego do site, que no exemplo foi definida como 100 GB (além do “G” você pode especificar o volume em “M”, de megabytes ou “K”, de kbytes).

A linha seguinte, “CBandPeriod”, determina o período de aplicação da quota, depois do qual a contagem é zerada. No exemplo usei “4W”, que especifica um período de 4 semanas, ou seja, 28 dias. Você poderia usar outros valores, como por exemplo “30D” (30 dias) ou “24H” (24 horas).

Em seguida, temos a opção “CBandScoreboard”, que indica o arquivo onde serão armazenadas as informações sobre o uso de banda do site (que criamos no passo anterior) e a CBandExceededURL, que permite especificar uma página de erro, que será exibida aos visitantes dos sites que ultrapassarem a quota de tráfego. Esta página continua sendo exibida (deixando o site essencialmente fora do ar) até o início do próximo período, quando a contagem é zerada.

O uso da página de erro não é muito bem visto entre os webmasters, pois faz com que o site fique fora do ar, fazendo com que visitas sejam perdidas e que as páginas percam posições nos mecanismos de busca. Em vez de tirar as páginas do ar, você pode simplesmente reduzir a velocidade de acesso, substituindo a opção “CBandExceededURL” pela “CBandExceededSpeed”, como em:

<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName http://www.joao.com.br
ServerAlias joao.com.br
DocumentRoot /var/www/joao
CBandLimit 100G
CBandPeriod 4W
CBandScoreboard /var/www/scoreboard/joao
CBandExceededSpeed 256kbps 3 5

</VirtualHost>

Nesse caso, ao ultrapassar a quota o site ficará limitado a 256 kbits, com direito a três requisições por segundo e um máximo de cinco requisições simultâneas. Ou seja, continuará no ar, mas o acesso ficará bastante lento (você pode ajustar os limites de acordo com a situação). Em um serviço comercial, o ideal seria combinar a aplicação da quota com o envio de um e-mail de aviso, explicando que a quota foi excedida e oferecendo a possibilidade de migrar para um plano com uma quota maior.

É possível também combinar o uso da limitação de banda e de conexões simultâneas com o uso da quota mensal, evitando assim que os sites consumam a quota muito rapidamente, prejudicando o desempenho dos outros sites hospedados no servidor. Nesse caso, combinamos as opções que acabamos de ver com as opções CBandSpeed e CBandRemoteSpeed, como em:

CBandLimit 100G
CBandPeriod 4W
CBandScoreboard /var/www/scoreboard/joao
CBandExceededSpeed 256kbps 3 5

CBandSpeed 1024kbps 10 20
CBandRemoteSpeed 512kbps 5 3

Depois de definidas as quotas, você pode concluir a configuração ativando o relatório de tráfego oferecido pelo cband. O relatório é atualizado em tempo real, mostrando detalhes sobre o uso de banda e o percentual da quota já consumido, permitindo que o próprio webmaster do site acompanhe e administre o tráfego do site e não seja pego de surpresa quando a quota for ultrapassada.

O cband oferece dois painéis de administração separados, um feito para ser acessado pelos usuários (o cband-status-me) e outro para uso do administrador (cband-status), que permite ver o tráfego de todos os sites e resetar os contadores de tráfego manualmente.

Para disponibilizar o painel de usuário, você adicionaria a entrada a seguir dentro da configuração do virtual host, logo depois das demais linhas de configuração do cband, que inserimos anteriormente:

<Location /cband-status-me>
SetHandler cband-status-me
</Location>

Isso fará com que o painel fique disponível dentro da pasta “cband-status-me”, dentro da URL do site. Se quiser usar outra pasta, basta especificá-la na primeira linha, alterando o “Location /cband-status-me”:

Para ativar o painel de acesso administrativo, adicione as linhas a seguir no arquivo principal de configuração do Apache (o apache2.conf ou httpd.conf). Isso faz com que ele fique disponível dentro da pasta “cband-status” de cada site, sem que você precise repetir a configuração dentro da seção referente a cada um. Note que, diferente da configuração anterior, criamos uma restrição de acesso, que permite o acesso apenas a partir do seu próprio endereço IP (de forma que apenas você tenha acesso). Se você usa uma conexão com IP dinâmico, vai precisar lembrar de alterar a configuração antes de cada acesso:

<Location /cband-status>
SetHandler cband-status
Order deny,allow
Deny from all
allow from 201.86.208.237
</Location>

Assim como no exemplo anterior, o relatório pode ser acessado via navegador, acessando a pasta “cband-status” de qualquer um dos sites hospedados no servidor.

Uma observação importante é que, no Debian Etch, os painéis de acesso são ativados, por padrão, através da configuração incluída no arquivo “/etc/apache2/mods-available/cband.conf“:

<IfModule mod_cband.c>
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-stats>
SetHandler cband-status-me
</Location>
</IfModule>

Essa configuração essencialmente desativa a aplicação das quotas, pois permite que qualquer um acesse o relatório administrativo através do “http://site.com/cband-status&#8221; e resete o contador na hora em que quiser.

A menos que você queira virar motivo de piada entre os usuários, é necessário editar o arquivo, limitando o acesso à pasta cband-status apenas para seu próprio endereço IP, como em:

<IfModule mod_cband.c>
<Location /cband-status>
SetHandler cband-status
Order deny,allow
Deny from all
allow from 201.86.208.237

</Location>
<Location /cband-stats>
SetHandler cband-status-me
</Location>
</IfModule>

Depois de cada alteração, não se esqueça de atualizar a configuração do Apache para que ela entre em vigor:

# /etc/init.d/apache2 reload

Concluindo, se o objetivo for apenas proteger o servidor contra usuários armados com programas aceleradores de download (que abrem um número muito grande de conexões simultâneas, com o objetivo de tornar a transferência de arquivos mais rápida) ou com programas que tentam baixar todo o site para leitura offline, sem estabelecer quotas ou limites de tráfego, você pode usar uma configuração mais simples, usando apenas a opção “CBandremoteSpeed”. Ela pode ser incluída diretamente no arquivo principal de configuração do Apache, o que faz com que ela seja aplicada automaticamente para todos os sites hospedados.

No caso do Debian, você poderia incluí-la no final do arquivo “/etc/apache2/apache2.conf”, antes da linha “Include /etc/apache2/sites-enabled/”, que carrega a configuração dos virtual-hosts, como em:

CBandRemoteSpeed 1024kbps 3 2

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/

No exemplo, limitei os clientes a um máximo de três requisições por segundo e duas conexões simultâneas, uma configuração que é similar à usada em muitos sites de download.

O speling é outro módulo útil e bastante usado. Ele tem a função de corrigir erros simples nos links digitados pelos usuários, encaminhando-os para a página com o nome mais similar, em vez de mostrar um erro 404. Com isso, um visitante que tentar acessar por engano a “http://www.gdhpress.com.br/curso“, por exemplo, será enviado para a “http://www.gdhpress.com.br/cursos“, que é a página com nome mais próximo e possivelmente a que ele desejava acessar.

Além de evitar a perda de algumas visitas, a correção automática das URLs ajuda a reduzir o volume de erros de indexação nos mecanismos de busca, causados por links externos apontando para páginas do site que não existem. Como o conteúdo do site não é duplicado (os visitantes são apenas redirecionados para a página correta, automaticamente), não existe nenhuma contra-indicação no uso do módulo, com exceção de um pequeno aumento na carga de processamento do servidor, proporcional ao volume de correções que ele precisar realizar.

Em praticamente todas as distribuições, o mod-speling é incluído diretamente no pacote principal do Apache, de forma que você precisa apenas ativá-lo.

Nas distribuições derivadas do Debian, use o a2enmod, como em:

# a2enmod speling
# /etc/init.d/apache2 force-reload

Nas derivadas do Red Hat, crie o arquivo “/etc/httpd/conf.d/speling.conf“, contendo a linha:

LoadModule speling_module modules/mod_speling.so

E em seguida reinicie o serviço:

# service httpd restart

Caso, ao reiniciar o Apache, você receber um erro como “[warn] module speling_module is already loaded, skipping”, significa que o módulo já está ativo por padrão. Nesse caso, você pode remover o arquivo, pois ele não é necessário.

Com o módulo ativo, você precisa apenas ativar o uso do speling, incluindo a linha “CheckSpelling on” dentro da configuração do site, como em:

<VirtualHost *:80>
ServerAdmin admin@gdhpress.com.br
ServerName http://www.gdhpress.com.br
DocumentRoot /var/www/gdhpress
CheckSpelling on
</VirtualHost>

Se preferir que o módulo seja usado automaticamente para todos os sites hospedados, inclua a linha diretamente no arquivo de configuração principal do Apache.

A principal limitação é que o módulo é capaz de corrigir apenas erros simples, agindo em casos em que o usuário troca ou omite apenas um caractere da URL, mas não em casos em que ele tenta acessar uma página aleatória. Nesse caso, a melhor solução é usar uma página 404 personalizada, que mostre um campo de busca ou alguma mensagem de erro bem humorada.

Para isso, adicione a linha a seguir dentro da configuração do virtual host (junto com a opção “CheckSpelling on”) ou então dentro do arquivo .htaccess, no diretório raiz do site:

ErrorDocument 404 /404.html

O “/404.html” indica a localização da sua página de erro personalizada, a partir do diretório raiz do site. Na verdade, você pode indicar qualquer página, incluindo uma página .php ou com outra extensão qualquer. Com um pouco de criatividade, você pode incluir truques, como fazer com que uma função dentro da página realize uma busca dentro das páginas do site pelo texto digitado pelo usuário e mostre os resultados, por exemplo.

Alguns administradores simplesmente encaminham o visitante para a página inicial do site, mas isso não é muito recomendável, pois fará com que os mecanismos de busca indexem a página várias vezes, o que pode prejudicar o posicionamento do site nas buscas. O ideal é criar uma página personalizada, incluindo a tag “<meta name=”robots” content=”noindex”>” dentro da seção “head” do html. Isso orienta os mecanismos de busca a não indexarem a página de erro.

Fonte: Link

Anúncios

~ por 3c0linux em julho 28, 2010.

 
%d blogueiros gostam disto: