sábado, 20 de agosto de 2011

Apache: mod_cband e mod_speling ( Limitar uso de banda e requisições simultâneas no 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
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 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 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.
Em um ambiente de desenvolvimento web, assim como qualquer outro é necessário a utilização de um sistema para projeção, contrução e depuração confiavel do software aplicativo que simule a realidade no qual seu software irá executar.
Tal simulação pode ser obtida com extrema perfeição, recriando o próprio ambiente servidor web com todas as necessidades exigidas pelo desenvolvedor com o sistema operacional Linux, bastando apenas configura-lo previamente para executar tal função.
As configurações demonstradas nesta postagem recriam um cenário de desenvolvimento real para o programador, que pode ser utilizado também por implantadores de sistemas para configuração de servidores web para a rede, seja ela uma intranet ou a própria internet. Nesta postagem iremos utilizar o webmin e o virtualmin como gerenciador, para criar executar e configurar os domínios virtuais disponiveis para o ambiente de desenvolvimento ou um servidor web real.

Compatibilidade de Sistema Operacional

As configurações aqui propostas foram testadas e configuradas no sistemas operacional Linux nas seguintes distribuições:
  • GNU Debian
  • Ubuntu
  • Fedora
  • CentOS
É possivel que em outras distribuições seja necessário algumas adaptações para implementação e uso, talves sendo necessário até que recompilação de pacotes para rodá-lo com o Virtualmin, como no caso do “suexec-custom” que é uma exigência do software Virtualmin para gerenciar os domínios como usuários a partir do diretório “/home”

Instalando Aplicações e Dependências

Com os repositório devidamente configurados e ativos basta apenas entrar com os comandos abaixo para instalar os aplicativos de depêndencia.
“Devo alertar que a configuração e ativação de repositórios no Linux e suas distribuições estão fora
do escopo desta postagem.”
# Gnu Debian
  apt-get install apt-show-versions libnet-ssleay-perl libio-pty-perl libauthen-pam-perl  libapt-pkg-perl

# Fedora
  yum -i libnet-ssleay-perl libio-pty-perl libauthen-pam-perl
 

 
 
# Debian
  apt-get install mysql-server proftpd apache2 apache2-suexec-custom bind9 openssh-server openssl php5 php5-dbg php5-curl php5-gd php5-cgi php5-cli php5-mcrypt php5-imagick php5-mysql php5-xdebug php-mail php5-dbg php5-recode phpmyadmin postfix webalizer subversion

# Fedora
  yum -i mysql-server proftpd apache2 apache2-suexec-custom bind9 openssh-server openssl php5 php5-dbg php5-curl php5-gd php5-cgi php5-cli php5-mcrypt php5-imagick php5-mysql php5-xdebug php-mail php5-dbg php5-recode phpmyadmin postfix webalizer subversion

Webmin e Virtualmin

Faça o download do webmin e dos plugins necessários para utiliza-lo como gerenciador do seu servidor nas versões correspondente ao da sua distribuição.
A demonstração abaixo o versionamento do arquivo no link foi substituida pela caracter “x”, bastando você verificar a versão mais atual e efetual o download.
[webmin]
Em http://www.webmin.com/download.html faça o download:
1
wget http://prdownloads.sourceforge.net/webadmin/webmin_x.xxx_all.deb
[Virtualmin]
Em http://www.webmin.com/vdownload.html faça o download:
1
wget http://download.webmin.com/download/virtualmin/virtual-server-x.xx.gpl.wbm.gz
1
wget http://download.webmin.com/download/virtualmin/virtual-server-theme-x.x.wbt.gz

Passo: 1

Instale o arquivo do webmin do download efetuado.
1    
2
3
4
5
# Debian
dpkg -i webmin_x.xxx_all.deb

#Fedora
rpm -ivh webmin_x.xxx_all.rpm

Passo: 2

Acesse o endereço especificado após a instalação do webmin na linha de comando https://localhost:10000 e entre como usuário “root”

Passo: 3

Instale os plugin que você efetuou o download da página do webmin no menu lateral esquerdo:
Webmin -> Webmin configuration -> Webmin Modules


e em seguida selecione o arquivo do plugin do virtualmin para instalação.

Passo: 4

Agora Instale o thema do Virtualmin indo até:
Webmin -> Webmin configuration -> Webmin Themes

Na Aba “Install Themes” selecione o arquivo do thema que foi baixado no download.

Passo: 5

Agora basta configurar o thema indo em “Change Language and Theme” -> “Webmin UI Theme” e selecionar o tema do Virtualmin (Virtualmin Framed Theme).

Configurando os Servidores

Após os passos acima você deve partir para a configuração dos servidores Web com PHP, E-mail, SSH, FTP, DNS, Webalizer e outros detalhes que serão explicados logo abaixo.

Apache Webserver

Vá ao menu “Servers -> Apache Webserver -> Configure Apache Modules” e habilite os seguintes modulos:
  • actions
  • alias
  • auth_basic
  • auth_file
  • authz_default
  • authz_groupfile
  • authz_host
  • authz_user
  • autoindex
  • cgi
  • deflate
  • dir
  • env
  • mime
  • negotiation
  • php5
  • python
  • reqtimeout
  • rewrite
  • setenvif
  • status
  • suexec

Logo Após click no botão “Enable Selected Modules” para abilitar o módulos selecionados.
Agora edite o arquivo /etc/apache2/suexec/www-data e altere a primeira linha para string abaixo e salve o arquivo:
1
/home

Postfix

Vá ao menu “Servers -> Postfix Mail Server ->Virtual Domais -> Domain Mapping Lookup Tables” e selecione “Map Specifications” e insira no campo a string abaixo e click em “save and Apply”:
1
hash:/etc/postfix/virtual

MySQL Server

Vá ao menu “Servers -> MySQL Database Server” e insira o usuario “root” e sua senha no qual você configurou na instalação do MySQL.

ProFTPD

No arquivo de configurações em “/etc/proftpd/proftpd.conf” descomente a linha que contenha a propriedade “DefaultRoot” como no exemplo abaixo:
1
2
# Use this to jail all users in their homes
DefaultRoot         ~

Configuração de Rede

Para o funcionamento correto do servidor será necessário efetuar algumas alterações na rede da máquina que hospedará os domínios virtuais.
No arquivo /etc/resolv.conf insira a linha abaixo:
1
nameserver 127.0.0.1
Caso exista outra configuração no arquivo citado, coloque a linha acima em primeiro plano ou seja antes de qualquer configuração existente.
Mais detalhes sobre configurações de rede pode ser encontrado aqui.

Detalhes Finais

Após os servidores serem devidamente configurados, vá ao menu lateral e click em “Refresh Modules” e logo após click em “System Information” para carregar a página “HOME” do Virtuamin. O webmin versão mais recente após configurado pergunta por algumas informações extras que pode ser respondido sem nenhum problema bastando apenas clicar no botão “Next” para avançar as configurações.

Na página Home click em “Re-check and Refresh Configuration” para o webmin checar se está tudo ok para rodar o sistema com todo o seu poder de gerenciamento.

Agora você pode gerar domínios virtuais para utilização no desenvolvimento de sites podendo acessar de qualquer browser instalado em seu sistema operacional. Vá ao menu lateral na parte superior e click em “Virtualmin -> Create Virtual Server”:

Autenticação e Controle de Acesso no Apache

O servidor web apache fornece a possibilidade de efetuar autenticação e controle de acesso ao conteúdo disponibilizado pelo teu site ou sistema web, tal recurso é aplicado pelo módulo “mod_auth” e “mod_access”.
A configuração pode ser disparada por um arquivo “.htaccess” que verifica a autenticação do usuário por outro arquivo que é especificado na configuração. Os usuários são adicionados ao arquivo de configuração com o comando “htpasswd”.
1
htpasswd -c /home/dominio/public_html/security/.htpasswd user1
Argumentos válidos para o comando htpasswd:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 # htpasswd
Usage:
htpasswd [-cmdpsD] arquivo usuario
htpasswd -b[cmdpsD] arquivo usuario senha

htpasswd -n[mdps] usuario
htpasswd -nb[mdps] usuario senha

-c  Cria um novo arquivo.
-n  Não atualiza o arquivo, Mostra os resultados de saida stdout.
-m  Força encriptação MD5 para a senha.
-d  Força encriptação CRYPT para o arquivo de senha. (Padrão)
-p  Não encripta a senha (Texto pleno).
-s  Força encriptação SHA para a senha.
-b  Usa a senha na linha de comando ao invés de perguntar para o usuário.
-D  Remove um usuário específico.

No Windows, NetWare e sistemas TPF sinalizador '-m' é usado por padrão.
Em todos os outros sistemas, a flag '-p' provavelmente não funcionará.

 

Simulação

Nada melhor do que a prática para fixar o aprendizado. Suponha que queiramos protejer o diretório “libs” dentro do diretório “public_html”, podemos iniciar a configuração da seguinte maneira. Primeiro crie um arquivo “.htaccess” dentro de “/home/seu-usuario/public_html/libs”.
Se possuir acesso SSH basta entrar com o seguinte comando ou efetue o upload do arquivo já configurado por FTP.
1
touch /home/seu-usuario/public_html/libs/.htaccess
Acrescente o seguinte conteúdo para o arquivo criado, e não se esqueça de alterar a linha acima “[seu-usuário]” por um caminho válido.


2
3
4
5
6
# Controle de acesso ao diretório da pasta [/home/seu-usuario/public_html/libs]
AuthType Basic
AuthName "Zona Restrita"
AuthUserFile /home/meu-usuario/public_html/libs/.htpasswd
Require valid-user
Options FollowSymLinks Indexes

Ou por SSH linha de comando:


cat << EOF > /home/seu-usuario/public_html/libs/.htaccess
# Controle de acesso ao diretório da pasta [/home/seu-usuario/public_html/libs]
AuthType Basic
AuthName "Zona Restrita"
AuthUserFile /home/meu-usuario/public_html/libs/.htpasswd
Require valid-user
Options FollowSymLinks Indexes
EOF

A configuração acima diz ao apache para restringir o diretório atual, liberando acesso somente aos usuários válidos pelo arquivo especificado pela propriedade “AuthUserFile”, que no nosso caso é “/home/seu-usuario/public_html/libs/.htaccess”.
A propriedade “AuthType” pode receber dois parametros diferentes: (Mais detalhes AuthType)
1
AuthType Basic|Digest
A diretiva “Require valid-user”, que fala por sí só, requer um usuário válido, ou seja os usuários especificados no arquivo “.htpasswd”.
E por fim a diretiva “Options FollowSymLinks Indexes”, que no nosso caso fará com que o apache liste os arquivos e diretórios existentes na pasta restrita.
Agora basta criar o arquivo que irá conter os usuários ou usuário de acesso ao diretório restrito.
1
htpasswd -c /home/seu-usuário/public_html/libs/.htpasswd user1

Pronto, Agora basta ir ao seu navegador e digitar a sua URL, como abaixo:
Se tudo ocorreu bem a caixa de diálogo a seguir ira aparecer na tela requisitando o nome do usuário configurado e a senha para acessar o diretório especificado.

Insira o nome de usuário e senha para ter acesso ao conteúdo do diretório restrito.

Configurando CGI no Apache

Configurando CGI no Apache | Nação Livre






























Com a massa de usuários de internet cada vez maior, um site ou sistema web, seja ele um blog ou um site institucional, fica inviável a sua utilização sem qualquer conteúdo dinâmico. Com a necessidade batendo a porta as páginas dinâmicas cresceram e melhoraram muito nos últimos anos, sendo possível efetuar ações que antes eram exclusivas de softwares desktop.
Os recursos como o Ajax, linguagens do lado do servidor (Java, PHP, ASP, C#, Ruby e dentre outras), possibilitam a manipulação de informações, podendo-se trabalhar  dados específicos de forma dinâmica para os usuários. Um grande exemplo de tal recurso são os gerenciadores de conteúdos, como WordPress, Joomla, sistemas de  E-commerce etc.


CGI – Common Gateway Interface

O CGI é um recurso fantástico, que fornece um interface de
portabilidade entre linguagens diversas a fornecerem conteúdo para a web de
forma simples e transparente. Sua simplicidade torna o desenvolvimento mais
fácil, pois não existe a necessidade de aprender uma nova linguagens de
programação. É possivel até criar um programa em C++ , compila-lo e utilizar sua
saida para fornecer seus dados para a internet.
Como foco principal desta postagem vamos conhecer o CGI e
como implementa-lo no servidor Apache.


Habilitando o CGI

Primeiramente é necessário configurar um diretório para
servir de repositório para as aplicações que rodarão como cgi. Isto pode ser
efetuado, colocando a propriedade “ScriptAlias” dentro das configurações do seu
domínio web no arquivo de configuração do apache.
1 2 3 4 5 6 7 8 9 10 11
<VirtualHost *:80> ...

ServerName dominio-da-web.com.br

ScriptAlias /cgi-bin/ /home/dominio-da-web/cgi-bin/ <Directory
/home/dominio-da-web/cgi-bin>

allow from all


Options +ExecCGI

AddHandler cgi-script .cgi </Directory>
... </VirtualHost>
Uma observação importante é que você pode denominar
quantos “ScriptAlias” forem necessários , porem aconselho a criar um repositório
único para não ter problemas com gerenciamento.
A configuração acima diz ao servidor Apache que o
diretório “cgi-bin” dentro do diretório do usuário do domínio manipulado será o
repositório dos arquivos CGI, que serão acessados publicamente pela URL do
navegador como http://www.dominio-da-web.com.br/cgi-bin/arquivo.cgi.
Ainda no exemplo acima, é configurado a extensão a ser
aceita como CGI dentro da tag <Directory> com a propriedade “AddHandler
cgi-script” como “.cgi”. Nesta configuração foi apenas configurado a extensão
“.cgi” para exemplo, mas se necessário pode-se especificar extensões diferente
ou até mesmo mais de uma extensão, como .pl, .bin, .py, .sh etc.

Vejamos:
1 2 3 4 5 6 7 8 9 10
<VirtualHost *:80> ...

ScriptAlias /cgi-bin/ /home/dominio-da-web/cgi-bin/ <Directory
/home/dominio-da-web/cgi-bin>

allow from all

Options +ExecCGI


AddHandler cgi-script .pl .py
.bin .sh </Directory> ... </VirtualHost>

Podemos ainda utilizar um documento padrão para ser
especificado quando houver a requisição para um diretório CGI. A utilização
deste recurso não utiliza “ScriptAlias” pois a diretiva “DirectoryIndex” com
esta opção emitiria uma mensagem de erro, para solucionar este problema
utilizaremos “Alias”.
1 2 3 4 5 6 7 8 9 10 11 12 13
<VirtualHost *:80> ...

Alias /cgi-bin/ /home/dominio-da-web/cgi-bin/
<Directory/home/dominio-da-web/cgi-bin>    
   Options ExecCGI     
   SetHandler
cgi-script    
   DirectoryIndex
index.py   
   Order allow,deny    
   Allow
from all    
   AllowOverride
none
</Directory>
...
</VirtualHost>


Testes de Configuração


Para efetuar testes em teu servidor de aplicações CGI,
segue abaixo alguns exemplos de códigos para serem utilizados.
Exemplo em C/C++
1 2 3 4 5 6 7 8 9 10 11
#include <iostream>




using namespace std;



int main(int
argc, char**
argv) {    
cout << "Content-type: text/plain"
<<
endl << endl;    
cout << "<h1>C/C++</h1>"
<<
endl;     cout
<<
"<p>Olá mundo !!! eu sou um CGI.</p>"
<<
endl;    
return
0;


}
Exemplo em Python
1 2 3 4 5
#! /usr/bin/env python



print("Content-type:
text/plain\n\n"
)

print("<h1>Python</h1>\n")


print("<p>Olá
mundo !!! eu sou um CGI.</p>\n"
)
Exemplo em Perl
1 2 3 4 5
#! /usr/bin/perl



print
"Content-type: text/plain\n\n"
;


print
"<h1>Perl</h1>\n"
;

print
"<p>Olá mundo !!! eu sou um CGI.</p>\n"
;
Exemplo em Shell Script

1 2 3 4 5
#! /bin/sh



echo "Content-type: text/plain\n\n"

echo "<h1>Perl</h1>\n"


echo "<p>Olá mundo !!! eu sou um
CGI.</p>\n"

Otimizando o Servidor Web Apache

Imagine o seu domínio saindo do ar porque a máquina no qual o site está hospedado não possui memória ou processador suficiente para processar todas as requisições que chegam até ela, ou isto já aconteceu, ou está acontecendo com você neste exato instante . Isto muito é mal não é ?
Por experiencia própria vou tentar passar aqui algumas dicas para evitar que isto aconteça, seja você um web master ou um administrador de redes.
Quando um sistema é desenvolvido, um dos requisitos do projetado é verificar a plataforma e hardware no qual este sistema sera executado, podendo prever se servidores já ativos suportarão a aplicação desenvolvida ou se será necessária a contratação de uma máquina mais robusta.
Mas o que fazer se mesmo após toda uma análise de requisitos e após algum tempo o servidor começar a dar TOP(s) muito altos, chegando até a travar o sistema, tornando o acesso remoto impossível porque de uma hora para outra muitas requisições chegaram ao servidor Apache e muitas requisições a base de dados foram executadas, deixando o MySQL totalmente doido.

Não existe uma forma genérica para se configurar serviços web, principalmente um servidor Web Apache apara responder a requisições em excesso, porem podemos chegar a um consenso ou uma luz no fim do túnel para agradarmos a Gregos e Troianos de como configura-lo a fim de otimizar os serviços prestados.
A ultima frase não é um tanto quanto animadora, mas, devo lembrar que cada tipo de serviço disposto, seja ele na web ou em uma intranet consome recursos de formas diferentes. Como uma aplicação que roda em uma loja de calçados  por exemplo, a disponibilidade do banco de dados, impressora, cabeamento, sistema operacional, hardware e outros recursos que fogem do escopo desta postagem são fatores que influenciam um serviço.
E claro, não podemos esquecer do mais problemático de todos, o fator “humano“.
Portanto após cuidarmos de todos estes detalhes, podemos partir para o principal, o Apache.
Primeiramente você deve analisar o tráfego de requisições que chegam ao servidor Apache, para se ter uma estatística de consumo de memória que cada requisição do Apache esta consumindo e o tempo que cada requisição está prendendo a instância criada no sistema.
Complicado não é?
Mas digamos que após executar o comando “top” no linux:
servidor: ~# top


Você reparou que a média de consumo de mémória de uma instancia do apache é de 6MB, se existir 500 processos em execução, basta multiplicar o valor da memória pela quantidade de processos para achar o resultado de 3GB de Memória, isto mesmo, 3GB de memória serão necessários para dar conta de todos os processos. Lembrando ainda que você deve reservar memória para o sistema operacional e as outras aplicações, incluindo o próprio servidor Apache que consome em torno de 100MB, fazendo com que todos fiquem em total harmonia.
Uma diretiva que se pode utilizar, porem em certas circunstancias pode trazer mais problemas do que solução, em caso de não haver possibilidade de aumentar recursos de hardware no servidor web, podemos alterar a propriedade MaxClients do arquivo de configuração do apache.
MaxClients 500
Esta propriedade vai limitar o máximo número de processos do apache em execução no sistema operacional, fazendo assim com que a capacidade de memória existente não estoure. Porem fazer isso com o servidor tendo mais requisições do que o limite estipulado, fará com que os usuário excedentes fiquem esperando pela liberação de um processo, para poder carregar as páginas web tão esperadas.
Claro que se os recursos forem escassos, não dá para fazer milagre.
Uma forma de avaliar melhor a configuração efetuada, é utilizar o comando “ab”:



# ab -n 500 -c 100 http://www.meu-site.com.br
O comando “ab” auxilia no teste e verificação de requisições ao sistema web Apache, fazendo com que se tenha um ideia de como se comportará o servidor web com as requisições as página de sites existentes. O comando “ab” ou Apache Bench não simula a real manipulação de requisições efetuadas por um usuário real, mas requisita o servidor muitas vezes.
Outra dica é ativar o KeepAlive no arquivo de configurações do Apache, fazendo com que várias requisições sejam efetuadas atravês de uma mesma conexão, não tendo assim, fazer com que não seje preciso encerrar um socket e abri-lo novamente.
Arquivos de configuração do Apache (apache2.conf)
1
2
3
4
5
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

Outra propriedade é o MaxKeepAliveRequests que que indica quantas requisições serão tratadas pelo KeepAlive.
1
2
3
4
5
6
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

A próxima propriedade deve ser atribuido um valor de acordo com o tipo de sistema que roda sobre o servidor web Apache, Mas não atribua um valor muito alto, pois fara com que a próxima requisição fique muito tempo na file aguardando para ser tratada.
1
2
3
4
5
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

As configurações abaixo indicarão ao Apache como se comportar com a inicialização, execução com requisições e cargar de processos.
1
2
3
4
5
6
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
1
2
3
4
5
StartServers                  5
MinSpareServers          5
MaxSpareServers        10
MaxClients                150
MaxRequestsPerChild   0

A propriedade StartServers indica o número de processos que ficará ativo na inicialização do servidor web Apache ficando carregado em memória, esperando por uma requisição.
MinSpareServers são instâncias reservadas pelo Apache para o caso de sofrer carga elevada de requisições, não tendo assim que criar novas instâncias para tratar as requisições que chegaram ao servidor, não fazendo com que essas requisições fiquem na fila de espera. As Opções MinSpareServers e MaxSpareServers determinam o mínimo e o máximo de reservas que deve ficar disponível para responder as requisições solicitadas
MaxClients A directiva MaxClients define número máximo de solicitações simultâneas que serão tratados pelo servidor web apache. Quaisquer tentativas de conexão acima do limite definido será colocado na fila até um processo filho seja liberado e então atender a tal requisição.
MaxRequestsPerChild Limita o número de pedidos que cada processo irá lidar durante a sua vida.

 

htaccess – a espada de dois gumes

Tome cuidado com o htaccess, pois tal recurso é incrivel do ponto de vista funcional, podendo efetuar diversas interações nas requisições que chegam ao servidor web, porem, este recurso é desencorajado tendo como motivo o sobrecarregamento do servidor com alterações de desvio do fluxo natural. Procure evitar utilizar este recurso e, se for necessário a sua utilização tenha cautela.

 

Módulos

Os módulos do apache o torna um servidor versátil e robusto, porem, tenha certeza que os módulos carregados são realmente necessários, pois do contrário estará carregando recurso extra e o apache rodaŕa mais pesado, consumindo mais memória do que o esperado.

 

Modular ou Compilado

Já ouvi muito sobre, “… instale o apache 1.3 … , ” … instale o apache 2.0, pois é melhor que o apache 2.2 …”, “… compila ele …”. Na verdade a respeito do versionamento, devemos e isto é incentivado na própria página do apache, a utilizar sempre d ultima versão do software a fim de obter todas as modificações ocorridas até o momento, como correções de vulnerabilidades e bugs. Claro que se você não pode efetuar a atualização do teu servidor web Apache para a ultima versão, terá que utilizar a versão que corresponde a sua necessidade, porem se você fará uma instalação nova do sistema, recomendo instalar a ultima versão disponível.
Já entre ser compilado, a grande diferença está em o apache já ter agregado a ele os módulos de necessidade do utilizador, como mod_rewrite, mod_ssl, mod_jk e entre outros, consumindo assim menos memória pois não é necessário carregar tal recurso. Mas o modular torna o serviço de manipulação e configuração do servidor, algo menos árduo facilitando a vida do administrador de sistemas tendo é claro como lado ruim o de consumir um pouco mais de memória para carregar os recursos extras.
Então optar entre o modular e o compilado é uma questão de necessidade e praticidade na utilização de recursos de hardware e gerenciamento do sistema, o que apenar o utilizador obterá tal resposta.
Obvio que toda a informação citada acima não servirá de nada se, você não coletar dados úteis sobre o teu servidor web, sobre as requisições e consumo que o teu site gera. Tendo isto em mente, devo ainda lembrar que o apache fornece uma infinidade de opções o que tornaria impossível agregar tal informação em apenas uma postagem.
Mas vai a dica, a documentação do apache é muito rica o que torna gratificante buscar informações sobre as configurações e recursos que o apache disponibiliza, abrindo assim o leque de conhecimento sobre este incrível servidor.
Para mais informações, comentem e enviem perguntas, pois se estiver ao meu alcance, terei o prazer em disponibilizar tal conhecimento.
Até a próxima.

quinta-feira, 18 de agosto de 2011

Max Connections do IIS no Windows XP SP2

O windows XP não foi feito para atuar como servidor, mas sim como máquina de usuário. Porém é frequente que façamos uso do windows XP durante o processo de desenvolvimento, então muitas vezes precisamos que o windows XP tenha um comportamento um pouco mais parecido com o de um servidor.

O IIS do windows XP vem configurado por padrão para um limite de no máximo 10 conexões simultâneas. Para algumas atividades de desenvolvimento isso pode ser prejudicial.

Podemos alterar esse limite de conexões simultâneas até um limite máximo de 40 conexões, limite definido pelo sistema operacional.

Para fazer essa alteração acesse o diretório adminScripts que estará dentro do diretório do IIS (por default é c:\inetpub) e execute a seguinte instrução, via prompt :

adsutil set w3svc/MaxConnections 40

Pronto, alteração realizada.

sábado, 6 de agosto de 2011

Instalando e Configurando um Servidor DHCP (Windows 2003)

Antes de poder configurar o serviço DHCP, é necessário instalá-lo no servidor. O DHCP não é instalado por padrão durante uma instalação típica do Windows Standard Server 2003 ou do Windows Enterprise Server 2003. É possível instalar o DHCP durante a instalação inicial do Windows Server 2003 ou após a instalação inicial ser concluída.


Como instalar o Serviço DHCP
1. Clique em Iniciar, menu executar e digite o comando cys.exe.
http://static.oficinadanet.com.br/imagens/coluna/2432/1.jpg
2. Na caixa de diálogo Bem vindo ao Assistente para Configurar o Servidor, clique emavançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/2.jpg
3. Na caixa de diálogo Etapas Preliminares, devemos observar os itens necessários para instalar e configurar ferramentas no Windows Server 2003.
http://static.oficinadanet.com.br/imagens/coluna/2432/3.jpg
4. Na caixa de diálogo Opções de Configuração, devemos escolher o item Configuração personalizada, para fazer somente a instalação do Servidor de DNS.
http://static.oficinadanet.com.br/imagens/coluna/2432/4.jpg
5. No Assistente de Configuração, devemos selecionar a opção Servidor DHCP, e clicar em avançar para fazer a instalação desta ferramenta.
http://static.oficinadanet.com.br/imagens/coluna/2432/5.jpg
6. Quando a Instalação estiver completa, clique em Concluir.

Como configurar o Serviço DHCP


Após a instalação e inicialização do serviço DHCP, é necessário criar um escopo, que é um intervalo de endereços IP válidos disponíveis para concessão para os computadores DHCP clientes na rede. A Microsoft recomenda que cada servidor DHCP no ambiente deve ter, pelo menos, um escopo que não sobreponha qualquer outro escopo de servidor DHCP em seu ambiente. No Windows Server 2003, os servidores DHCP em um domínio com base no Active Directory deve ser autorizado para impedir que servidores DHCP invasores fiquem online. Qualquer Servidor DHCP do Windows Server 2003 que se autodetermina autorizado não gerenciará clientes.

Como criar um novo escopo
1. Clique em Iniciar, aponte para Programas e para Ferramentas administrativas e clique em DHCP.

2. Na árvore do console, clique com o botão direito do mouse no servidor DHCP no qual deseja criar o novo escopo DHCP e clique em Novo Escopo.

3. No Assistente para novos escopos, clique em Avançar e digite um nome e uma descrição para o escopo. Pode ser qualquer nome que quiser, mas deve ser descritivo o suficiente de modo que possa identificar a finalidade do escopo na sua rede (por exemplo, é possível usar um nome como "Endereços de clientes do escritório de administração"). Clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/6.jpg
4. Digite o intervalo de endereços que podem ser concedidos como parte deste escopo (por exemplo, um intervalo de endereços IP iniciando de 192.168.0.100 e terminando em um endereço de 192.168.0.250). Como estes endereços serão fornecidos aos clientes, todos deverão ser válidos para a rede e não estarem atualmente em uso. Se desejar usar uma máscara de sub-rede diferente, digite a nova máscara de sub-rede. Clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/7.jpg
5. Digite um endereço IP que você deseja excluir da lista inserida. Isto inclui qualquer endereço no intervalo descrito na etapa 4 que já podem ter sido atribuído estaticamente a diversos computadores na organização. Normalmente, os controladores de domínio, os servidores da Web, os servidores DHCP, os servidores DNS (Sistema de nomes de domínio) e outros servidores, têm endereços IP atribuídos estaticamente. Clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/7.jpg
6. Digite o número de dias, horas e minutos antes da expiração de um endereço IP concedido deste escopo. Isto determina por quanto tempo um cliente pode deter um endereço concedido sem renová-lo. Clique em Avançar e em Sim, desejo configurar essas opções agora para estender o assistente para incluir definições para a maioria das opções comuns de DHCP. Clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/8.jpg
7. Digite o endereço IP para o gateway padrão que deverá ser usado pelos clientes que obtêm um endereço IP deste escopo. Clique em Adicionar para colocar o endereço do gateway padrão na lista e clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/9.jpg
8. Se estiver usando servidores DNS na sua rede, digite o nome de domínio da sua organização na caixa Domínio pai. Digite o nome do servidor DNS e clique em Resolver para garantir que o servidor DHCP possa contatar o servidor DNS e determinar seu endereço. Em seguida, clique em Adicionar para incluir este servidor na lista de servidores DNS atribuídos aos clientes DHCP. Clique em Avançar e execute as mesmas etapas se estiver usando um servidor WINS (serviço de Cadastramento na Internet do Windows), adicionando seu nome e endereço IP. Clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/10.jpg
9. Click Sim, desejo ativar este escopo agora para habilitar o escopo e permitir que os clientes obtenham concessões e, clique em Avançar.
http://static.oficinadanet.com.br/imagens/coluna/2432/11.jpg
10. Clique em Concluir.
11. Na árvore do console, clique no nome do servidor e clique em Autorizar no menu Ação.

Solução de problemas

As seguintes seções explicam como solucionar alguns dos problemas que podem ocorrer ao tentar instalar e configurar um servidor DHCP com Windows Server 2003 em um grupo de trabalho.

Os clientes não podem obter um endereço IP
Se um cliente DHCP não tiver um endereço IP configurado, isso normalmente indicará que o cliente não pôde entrar em contato com um servidor DHCP. Isto pode ser causado por um problema de rede, ou pelo fato do servidor DHCP não estar disponível. Se o servidor DHCP foi iniciado e outros clientes conseguiram obter um endereço válido, verifique se o cliente tem uma conexão de rede válida e, se todos os dispositivos de hardware do cliente relacionados (incluindo cabos e adaptadores de rede) estão funcionando corretamente.

O servidor DHCP não está disponível
Se um servidor DHCP não fornecer endereços concedidos aos clientes, normalmente isso ocorrerá porque o serviço DHCP não iniciou. Se este for o caso, talvez o servidor não tenha sido autorizado para operar na rede. Se você conseguiu iniciar o serviço DHCP anteriormente, mas parou deste então, use o Visualizar Eventos para verificar o log do Sistema em busca de entradas que possam explicar a razão do serviço DHCP não iniciar.

Para reiniciar o serviço DHCP:
- Clique em Iniciar e em Executar.
- Digite cmd e pressione ENTER.- Digite net start dhcpserver e pressione ENTER.
-ou-- Clique em Iniciar, aponte para Programas, para Ferramentas administrativas e clique em Gerenciamento do computador.- Expanda Serviços e aplicativos e clique em Serviços.- Localize e clique duas vezes em Servidor DHCP.- Verifique se Inicialização está definido como Automático e se Status do Serviço está definido como Iniciado. Se não estiver, clique em Iniciado.- Clique em OK e feche a janela do Gerenciamento do Computador.