Sie sind auf Seite 1von 30

Configurando um servidor LAMP

(Linux + Apache + MySQL + PHP) Introduo


Os servidores web so a espinha dorsal da Internet, so eles que hospedam todas as pginas, incluindo os mecanismos de busca e servem como base para todo tipo de aplicativo via web, incluindo os webmails. No futuro, esta tendncia deve se acentuar, com pginas web dinmicas e aplicativos via web substituindo cada vez mais os aplicativos desktop. Nos primrdios da internet, eram utilizadas apenas pginas html estticas e scripts CGI. O Apache em si continua oferecendo suporte apenas a esses recursos bsicos, mas ele pode ser expandido atravs de mdulos, passando a suportar scripts em PHP, acessar bancos de dados MySQL, entre inmeros outros recursos. Sempre que solicitada uma pgina em PHP ou outra linguagem, entra em ao o mdulo apropriado, que faz o processamento necessrio e devolve ao Apache a pgina html que ser exibida. Entram em ao, ento, os gestores de contedo e fruns, que combinam os recursos do PHP com um banco de dados como o MySQL, acessado atravs dele. A combinao de tudo isso forma a soluo que popularmente chamada de "LAMP" (Linux + Apache + MySQL + PHP). O Apache e o MySQL, juntamente com o suporte a PHP podem ser tambm instalados sobre o Windows (formando o "WAMP"), uma soluo relativamente popular entre administradores Microsoft que no se sentem vontade em usar o IIS. Segundo a Netcraft, pouco mais de 50% dos servidores web do mundo rodam o Apache (http://news.netcraft.com/archives/web_server_survey.html), a maior parte deles sobre o Linux. O percentual real na verdade um pouco maior, pois um grande nmero de administradores configuram seus servidores para divulgarem informaes falsas sobre o servidor web usado, de forma a no fornecer qualquer informao que possa facilitar ataques. Estes servidores no-identificados aparecem na pesquisa como "other". Alm de ser um dos servidores web mais antigos e um dos mais seguros, o Apache possui inmeros mdulos, que adicionam suporte aos mais exticos recursos. A maioria das pginas atuais utiliza uma estrutura em PHP, freqentemente com um banco de dados MySQL ou PostgreSQL. Existem, inclusive, muitos sistemas prontos, como o phpBB (frum) e o WordPress (para gerenciamento de contedo),

que podem ser instalados sem muita dificuldade depois que o servidor web j estiver rodando. Alm do servidor web em si, voc quase sempre vai precisar configurar tambm um servidorDNS, que responder pelo domnio do seu site ou empresa. Aprender a configurar o DNS corretamente importante, caso contrrio voc pode ter problemas ao enviar e-mails (pela falta do DNS reverso), ou mesmo ter problemas mais graves com o registro do domnio. A Apache permite hospedar vrios sites no mesmo servidor, recurso chamado de virtual hosts. Apenas os sites mais acessados so capazes de saturar os recursos de um servidor dedicado de configurao razovel, por isso hospedar vrios sites no mesmo servidor uma forma de economizar recursos e trabalho.

Instalando o Apache
O Apache pode ser dividido em duas grandes famlias: o Apache 2.x e o Apache 1.3 que, apesar de muito antigo, ainda usado em muitos servidores. O Apache 2 trouxe muitas vantagens, sobretudo do ponto de vista do desempenho, alm de oferecer novos mdulos e mais opes de segurana, mas sua adoo foi retardada nos primeiros anos por um detalhe muito simples: o fato de ele ser incompatvel com os mdulos compilados para o Apache 1.3. Como os mdulos so a alma do servidor web, muitos administradores ficavam amarrados ao Apache 1.3 devido falta de disponibilidade de alguns mdulos especficos para o Apache 2. Conforme o tempo foi passando, mais e mais mdulos foram portados, sem falar de novos mdulos desenvolvidos diretamente para uso em conjunto com o Apache 2. Hoje em dia, o Apache 1.3 ainda sobrevive em muitas instalaes devido inrcia natural que temos dentro do ramo de servidores, mas no existe nenhum bom motivo para us-lo em uma nova instalao. O Apache 2 simplesmente melhor em todos os quesitos. Ao instalar o Apache 2, o suporte a SSL instalado automaticamente junto com o pacote principal. Instale tambm o pacote apache2-utils, que contm diversos utilitrios de gerenciamento que usaremos a seguir: # apt-get install apache2 apache2-utils Se desejar ativar o suporte a pginas seguras, voc vai precisar tambm do pacote "ssl-cert", necessrio para ativar o suporte a SSL e gerar os certificados. Ele no instalado por padro ao fazer uma instalao enxuta do Debian ou do Ubuntu: # apt-get install ssl-cert Se voc estiver utilizando o CentOS ou o Fedora, instale o pacote "httpd", que contm o Apache 2 e os utilitrios: # yum install httpd Diferente do Debian, o servio no ser configurado para ser ativado no boot por padro e nem mesmo inicializado automaticamente aps a instalao. Para ativ-lo, necessrio ativar o servio e, em seguida, criar os links para incio automtico usando o chkconfig # service httpd start

# chkconfig httpd on Seguindo os nomes dos pacotes, no Debian o servio se chama "apache2", enquanto no Fedora e no CentOS ele se chama "httpd". Para reiniciar o servidor voc usa, respectivamente, os comandos "/etc/init.d/apache2 restart" e "service httpd restart". Acessando o endereo "http://127.0.0.1", voc ver uma pgina de boas-vindas, que indica que o servidor est funcionando. Se no houver nenhum firewall no caminho, ele j estar acessvel a partir de outros micros da rede local ou da internet:

Por enquanto, temos apenas uma verso bsica do Apache, que simplesmente exibe arquivos html e executa scripts CGI. Por padro, o diretrio raiz do servidor Web "/var/www" (no Debian) ou "/var/www/html" (no Fedora). Com isso, a pgina "http://seu.servidor/index.html" , na verdade, o arquivo "/var/www/index.html" ou "/var/www/html/index.html". Como de praxe, o diretrio raiz definido atravs de uma opo dentro do arquivo principal de configurao (a opo "DocumentRoot") e pode ser alterado caso desejado. Ao hospedar diversos sites no mesmo servidor, voc define uma pasta raiz diferente para cada um. Como pode ver, a instalao do Apache propriamente dita bastante simples, o grande desafio configurar e otimizar o servidor.

Instalando o suporte a PHP


No incio, existiam apenas pginas html estticas, com links atualizados manualmente. Depois, surgiram os scripts CGI (geralmente escritos em Perl), que permitiram criar vrios tipos de formulrios e automatizar funes. Finalmente, surgiu o PHP, adotado rapidamente como a linguagem padro para criao de todo tipo de pgina dinmica, frum ou gerenciador de contedo. Alm da linguagem ser bastante flexvel, um script em PHP chega a ser mais de 100 vezes mais rpido que um script CGI equivalente, alm de mais seguro. Em resumo, um script CGI um executvel, que precisa ser carregado na memria, executado e descarregado cada vez que feita uma requisio. No caso do PHP, o interpretador fica carregado continuamente e simplesmente vai executando de forma contnua os comandos recebidos dos scripts includos nas pginas. Para quem programa em Perl, existe a possibilidade de utilizar o mod-perl, instalvel atravs do pacote "apache-mod-perl" ou "libapache2-mod-perl2". Assim como o PHP, o mod-perl um mdulo do Apache que fica continuamente carregado na memria, executando os scripts Perl de uma forma bem mais rpida e segura que os scripts CGI. Voltando ao assunto principal, no Debian o suporte a PHP instalado atravs do pacote "php5" (ou "php4", de acordo com a verso escolhida). Para instal-lo, basta usar o gerenciador de pacotes da distribuio em uso, como em: # apt-get install php5 No caso do CentOS e do Fedora, usado um pacote unificado, o "php", que inclui a verso mais recente do interpretador, eliminando a confuso: # yum install php Com o interpretador PHP instalado, falta instalar o mdulo do Apache 2, que no Debian est disponvel atravs do pacote "libapache2-mod-php5" (ou "libapache2-mod-php4", de acordo com a verso desejada): # apt-get install libapache2-mod-php5 O mdulo "libapache2-mod-php5" instalado dentro da pasta

"/usr/lib/apache2/modules/" e ativado de uma forma diferente que no Apache 1.3. Ao invs de adicionar as linhas que ativam o mdulo e criam as

associaes de arquivos no final do arquivo httpd.conf, so criados dois arquivos dentro da pasta "/etc/apache2/mods-available/", com, respectivamente, a ativao do mdulo e as associaes de arquivos. Os links so criados automaticamente ao instalar o pacote, mas voc pode tirar qualquer dvida usando o comando a2enmod: # a2enmod php5 No esquea de reiniciar o servio para que o mdulo seja carregado e a configurao entre em vigor: # /etc/init.d/apache2 force-reload ou: # service httpd restart No caso do CentOS/Fedora o mod_php instalado junto com o pacote "php" e ativado automaticamente, atravs da criao do arquivo "/etc/httpd/conf.d/php.conf". Dentro dele, voc encontra as linhas que carregam o mdulo e criam a associao com os arquivos .php, como em: LoadModule php5_module modules/libphp5.so AddHandler php5-script .php AddType text/html .php DirectoryIndex index.php Se voc tiver a curiosidade de olhar o contedo dos arquivos "/etc/apache2/modsenabled/php5.conf" e "/etc/apache2/mods-enabled/php5.load" em uma distribuio derivada do Debian, vai perceber que as linhas contidas neles so muito similares. Na verdade, o Apache usado no Debian e o usado no CentOS o mesmo software, apenas configurado de forma ligeiramente diferente. Com o suporte a PHP ativado, o Apache continua exibindo diretamente pginas com extenso .htm ou .html, mas passa a entregar as pginas .php ou .phps ao interpretador php, que faz o processamento necessrio e devolve uma pgina html simples ao Apache, que se encarrega de envi-la ao cliente. Estas pginas processadas so "descartveis": cada vez que um cliente acessa a pgina, ela processada novamente, mesmo que as informaes no tenham sido alteradas. Dependendo do nmero de funes usadas e da complexidade do cdigo,

as pginas em PHP podem ser bastante pesadas. No incomum que um site com 100.000 pageviews dirios (o que corresponde a umas 5 a 8 requisies por segundo nos horrios de pico) precise de um servidor dedicado, de configurao razovel. Quase sempre, os sistemas desenvolvidos em PHP utilizam tambm um banco de dados MySQL ou Postgre SQL. Naturalmente, perfeitamente possvel que os scripts simplesmente salvem as informaes em arquivos de texto dentro do diretrio do site, mas isso resultaria em um desempenho muito ruim, sem falar em eventuais brechas de segurana. Utilizar um banco de dados permite armazenar um volume muito maior de informaes, acessveis de forma mais segura. Para que o interpretador PHP seja capaz de acessar o banco de dados, necessrio ter instalado (alm do servidor MySQL propriamente dito) o mdulo "php5-mysql" (ou "php4-mysql"), que faz a juno entre os dois componentes: # apt-get install php5-mysql No caso do PostgreSQL, utilizado o mdulo "php5-pgsql", que tem a mesma funo: # apt-get install php5-pgsql No se esquea de reiniciar o Apache, para que as alteraes entrem em vigor: # /etc/init.d/apache force-reload No caso do Fedora e do CentOS, muda apenas o nome do pacote, que passa a se chamar simplesmente "php-mysql": # yum install php-mysql Para verificar se o suporte a PHP est realmente ativo, crie um arquivo de texto chamado "info.php" (ou outro nome qualquer, seguido da extenso .php) dentro da pasta do servidor web, contendo apenas a linha abaixo: <?php phpinfo( ); ?> Salve o arquivo e abra a pgina atravs do navegador. A funo "phpinfo", que usamos no arquivo, faz com que o servidor exiba uma pgina com detalhes da configurao do PHP e dos mdulos ativos:

Depois de verificar, remova o arquivo, pois no interessante que essas informaes fiquem disponveis ao pblico.

Instalando o MySQL
O MySQL um banco de dados extremamente verstil, usado para os mais diversos fins. Voc pode acessar o banco de dados a partir de um script em PHP, atravs de um aplicativo desenvolvido em C ou C++, ou praticamente qualquer outra linguagem (at mesmo atravs de um shell script! :). Existem vrios livros publicados sobre ele, por isso vou me limitar a falar sobre a instalao e a configurao necessria para utiliz-lo em um servidor LAMP, em conjunto com o Apache e o PHP. O primeiro passo instalar o servidor MySQL propriamente dito. Nas distribuies derivadas do Debian precisamos instalar apenas o pacote "mysql-server" usando o apt-get: # apt-get install mysql-server No CentOS ou Fedora, instalamos os pacotes "mysql" e "mysql-server", usando o yum: # yum install mysql mysql-server Voc pode instalar tambm os pacotes "mysql-client" (o cliente que permite acessar os dados e fazer modificaes no banco de dados) e o "mysql-navigator" (uma interface grfica para ele). Para que o servio seja configurado para ser carregado durante o boot, ative-o usando o chkconfig: # chkconfig mysqld on Antes de iniciar o servio, rode o comando "mysql_install_db". Ele prepara o terreno, criando a base de dados "mysql" (usada para armazenar a configurao do servidor MySQL, incluindo informaes sobre os usurios e sobre as demais bases de dados) e tambm uma base de dados chamada "test", que pode ser usada para testar o servidor: # mysql_install_db O passo seguinte ativar o servidor MySQL: # /etc/init.d/mysql start

No caso do Fedora e do CentOS, o servio se chama "mysqld", ao invs de simplesmente "mysql", como no caso do Debian: # service mysqld start O MySQL possui um usurio padro chamado "root", que, assim como o root do sistema, tem acesso completo a todas as bases de dados e usado para fazer a configurao inicial do sistema, assim como tarefas de manuteno. Esta conta inicialmente no tem senha, por isso voc deve definir uma logo depois de iniciar o servio, usando o comando "mysqladmin -u root password senha", incluindo a senha desejada diretamente no comando, como em: # mysqladmin -u root password psUT7wq01 Se voc precisar trocar a senha posteriormente, necessrio acrescentar o parmetro "-p" antes do "password" e, em seguida, especificar a nova senha, como em: # mysqladmin -u root -p password psUT7wq01 Enter password: ******** Veja que nesse caso necessrio incluir a senha antiga ao executar o comando, antes de continuar, j que do contrrio teramos uma brecha bvia de segurana. Continuando, depois de definir a senha, o prximo passo criar uma base de dados. Voc pode instalar vrios scripts diferentes (um frum, um chat e um gestor de contedo, por exemplo) no mesmo servidor e, inclusive, vrias cpias de cada um. Isso cada vez mais utilizado, tanto dentro de sites que oferecem diversos servios, quanto em servidores compartilhados, onde os responsveis por cada site tm a liberdade de instalar os sistemas de sua preferncia.

Instalando o phpMyAdmin
Depois dessa configurao inicial, voc pode experimentar instalar um gerenciador grfico para facilitar a manuteno do seu servidor MySQL. Uma boa opo neste caso o phpMyAdmin. Para instal-lo, basta instalar o pacote "phpmyadmin", como em: # apt-get install phpmyadmin ou: # yum install phpmyadmin O pacote para instalao em outras distribuies, que no incluam o pacote por padro, pode ser encontrado no: http://www.phpmyadmin.net/. O phpMyAdmin um gestor de configurao escrito em PHP que trabalha em conjunto com o Apache. Ele permite que voc crie bases de dados, ajuste as permisses de acesso dos usurios, faa backup, e diversas outras atividades administrativas de uma forma mais simples que atravs do prompt de comando. Uma vez instalado, ele pode ser acessado atravs do endereo

"http://servidor/phpmyadmin/" ou "https://servidor/phpmyadmin/". Na tela inicial, voc pode se logar usando qualquer uma das contas registradas no MySQL. Use o root para tarefas administrativas, quando for necessrio ter acesso a todas as bases ou fazer backup de tudo, e uma das contas restritas para acessar uma base especfica:

O acesso via HTTPS prefervel para acessos feitos via web, j que evita que as senhas de acesso e outras informaes fiquem circulando em texto puro por a. O pacote do Debian se encarrega de ativar o suporte a SSL no phpMyAdmin automaticamente, mas para us-lo necessrio tambm ativar o suporte a SSL na configurao do Apache. Caso, mesmo depois de gerar o certificado e ativar o SSL no Apache, voc continue recebendo um erro ao tentar acessar a interface do phpMyAdmin via SSL, experimente reconfigurar o pacote usando o dpkg-reconfigure, como em: # dpkg-reconfigure phpmyadmin Selecione a opo "apache2" quando o script perguntar sobre o servidor web usado e responda "sim" quando ele perguntar se voc deseja reiniciar o servio:

No CentOS e em diversas outras distribuies o phpMyAdmin vem configurado por padro para permitir conexes apenas a partir da mquina local, uma precauo de segurana. Com isso, ao tentar acessar a interface remotamente, voc recebe um "Forbidden. You don't have permission to access /phpmyadmin/ on this server". Para solucionar o problema, edite o arquivo "/etc/httpd/conf.d/phpmyadmin.conf" e comente a linha "Deny from All", dentro da seo "<Directory "/usr/share/phpmyadmin">", como em: <Directory "/usr/share/phpmyadmin"> Order Deny,Allow # Deny from all Allow from 127.0.0.1 </Directory> Uma observao importante que ao ser usado em conjunto com o Apache, instalado no mesmo servidor que ele, o MySQL acessado apenas localmente,

atravs da interface de loopback. O Apache envia a requisio ao mdulo PHP que faz o acesso ao banco de dados, tudo localmente. Nessa configurao, o servidor MySQL no deve ficar disponvel para a Internet. Configure o firewall para bloquear a porta 3306 usada pelo servidor MySQL, alm de todas as outras portas que no forem explicitamente necessrias. Caso o servidor MySQL precise ficar acessvel para outros servidores (voc pode configurar o phpBB e outros scripts para utilizarem um servidor MySQL externo), configure o firewall para deixar a porta aberta apenas para os endereos IP dos servidores que forem ter acesso. Como os servidores dedicados sempre utilizam endereos fixos (ao contrrio dos servidores domsticos), esta configurao fica mais simples. Para administrar seu servidor MySQL remotamente, o ideal que se conecte ao servidor via SSH e faa todo o trabalho atravs dele. Se precisar acessar diretamente alguma ferramenta de configurao, como o Webmin ou o phpMyAdmin, voc pode criar um tnel (novamente usando o SSH) ligando a porta correspondente do servidor a uma porta da sua mquina e fazer o acesso atravs dela.

Criando Virtual Hosts


O suporte a virtual hosts um daqueles recursos fundamentais, que possibilitaram o surgimento da Internet da forma como a conhecemos hoje. Ele permite hospedar diversos sites, com domnios ou subdomnios diferentes usando um nico servidor e um nico endereo IP. Os nicos limitantes com relao ao volume de sites que possvel hospedar so os recursos de hardware do servidor e a banda disponvel. Servios de hospedagem compartilhada (os planos de shared hosting) utilizam este recurso de forma intensiva, de forma a espremer o maior nmero possvel de clientes em cada servidor, sem falar nos servios de hospedagem gratuita onde, em muitos casos, um nico servidor pode hospedar dezenas de milhares de sites diferentes. Ao usar virtual hosts, os arquivos de cada site ficam guardados em uma pasta diferente e o servidor se encarrega de direcionar cada visitante pasta correta. Os recursos do servidor (HD, memria, processamento e link) so divididos entre os sites hospedados, assim como vrios programas abertos simultaneamente disputam os recursos da mquina. Isso faz muito sentido no caso de sites pequenos ou mdios, que no possuem um nmero suficiente de visitas para saturarem, sozinhos, o servidor. Em geral, o servidor configurado de forma que os usurios tenham direito a uma determinada quota de espao em disco, possam acessar os arquivos do site via FTP ou SFTP e tenham acesso a uma ou mais bases de dados do servidor MySQL, o que permite a instalao de gestores de contedo como o WordPress. Entretanto, eles no podem instalar novos pacotes nem alterar a configurao do servidor. Feitas as apresentaes, vamos configurao. :) Invariavelmente, ao hospedar vrios domnios, voc precisa configurar um servidor DNS para responder por todos os domnios hospedados no servidor, entregando o endereo IP do seu servidor Apache. O cliente acessa ento o servidor, solicitando o site desejado, como em "joao.com.br"; o servidor web verifica a configurao e entrega os arquivos apropriados ao cliente. A configurao do servidor DNS pouco intuitiva, mas no chega a ser to complicada quanto muitos dizem. Em resumo, voc precisaria instalar o bind no servidor e editar a configurao, adicionando uma nova configurao de zona para cada domnio hospedado. Isso feito em duas etapas. Na primeira, voc edita o

arquivo named.conf, adicionando uma entrada com esta, especificando o domnio e o arquivo com a configurao: zone "joao.com.br" IN { type master; file "/etc/bind/db.joao"; allow-transfer {64.234.23.13;}; } Dentro do arquivo "/etc/bind/db.joao", especificado no arquivo, iria uma

configurao similar a esta, especificando o domnio, o nome do servidor e o endereo IP usado por ele, assim como o nome e o endereo IP do servidor DNS secundrio: @ IN SOA servidor.joao.com.br. hostmaster.joao.com.br.( 2008061645 3H 15M 1W 1D ) NS servidor.joao.com.br. NS ns2.joao.com.br. IN MX 10 servidor.joao.com.br. joao.com.br. A 64.234.23.12 www A 64.234.23.12 ns1 A 64.234.23.13 No necessrio que o DNS esteja instalado no mesmo servidor que o Apache, a funo dele ser unicamente responder s requisies dos clientes, fornecendo o IP correto. Para ativar o uso dos virtual hosts, o primeiro passo criar uma pasta separada para cada site que ser hospedado. Voc pode usar a prpria pasta "/var/www", como em: # mkdir /var/www/joao # mkdir /var/www/maria

Em seguida, necessrio adicionar uma nova seo dentro da configurao do Apache para cada um, logo depois da configurao do site default. Nas distribuies derivadas do Debian, so usados arquivos de configurao separados para cada site, armazenados na pasta "/etc/apache2/sites-available". Imagine que vamos hospedar os sites "www.joao.com.br" e "www.maria.com.br", usando as duas pastas criadas anteriormente. Criaramos, ento, um arquivo para cada site, contendo o seguinte: - /etc/apache2/sites-available/joao: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao </VirtualHost>

- /etc/apache2/sites-available/maria: <VirtualHost *:80> ServerAdmin maria@gmail.com ServerName www.maria.com.br ServerAlias maria.com.br www.maria.com.br DocumentRoot /var/www/maria </VirtualHost> Note que adicionei uma nova diretiva, a "ServerAlias", que permite que o site seja acessado tanto com, quanto sem o "www". A linha "ServerAdmin" , na verdade, opcional, contm apenas o e-mail de contato do administrador do site. A mesma configurao usada se voc quiser hospedar os sites usando subdomnios, como em "joao.gdhn.com.br" e "maria.gdhn.com.br". Nesse caso, no usamos o "www" e, por isso, no precisamos da linha "ServerAlias":

<VirtualHost *:80> ServerAdmin hostmaster@gdhn.com.br ServerName maria.gdhn.com.br DocumentRoot /var/www/maria </VirtualHost> Depois de feita a configurao, ative ambos os sites usando o comando a2ensite, o que criar links para eles na pasta "/etc/apache2/sites-enabled": # a2ensite joao # a2ensite maria Para que a configurao funcione, necessrio editar tambm o arquivo "/etc/apache2/sites-available/default", substituindo as linhas: NameVirtualHost * <VirtualHost *> Por: NameVirtualHost *:80 <VirtualHost *:80> Essa configurao necessria para que voc possa ativar o suporte a SSL para os virtual hosts. Sem ela, alm do SSL no funcionar, voc precisaria modificar a configurao de cada um, usando sempre "<VirtualHost *>" ao invs de "<VirtualHost *:80>". Voc pode adicionar quantos sites quiser usando esses mesmos passos. Sempre que alterar a configurao, necessrio atualizar a configurao do Apache. Nesse caso, o parmetro "reload" suficiente (o "force-reload" necessrio apenas ao ativar ou desativar mdulos): # /etc/init.d/apache2 reload Alm de configurar o servidor web, preciso configurar tambm um servidor FTP ou SFTP, para que os usurios possam acessar os arquivos de suas respectivas pastas, a fim de atualizarem seus sites. A forma mais simples de fazer isso criar

um usurio para cada um e dar acesso a eles via FTP. Outra opo utilizar o SFTP, que permite acesso seguro. Veja que as trs coisas acabam se integrando: o Bind resolve os nomes de domnio, o Apache fornece as pginas e o FTP ou SFTP permite que os webmasters atualizem os sites. Continuando, ao utilizar o Fedora, CentOS ou outra distribuio derivada do Red Hat, a configurao de todos os virtual hosts adicionada na seo final do arquivo "/etc/httpd/conf/httpd.conf", depois do "# Section 3: Virtual Hosts". Procure pela seo "Virtual Hosts", perto do final do arquivo, e descomente a linha: NameVirtualHost *:80 A partir da, voc pode adicionar cada um dos sites hospedados no servidor usando a mesma configurao que vimos anteriormente, como em: <VirtualHost *:80> ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao </VirtualHost>

<VirtualHost *:80> ServerName www.maria.com.br ServerAlias maria.com.br www.maria.com.br DocumentRoot /var/www/maria </VirtualHost> A principal diferena nesse caso que para desativar um determinado site voc precisa abrir novamente o arquivo de configurao e remover (ou comentar) a seo referente a ele, em vez de utilizar o "a2dissite", como no Debian. Depois de fazer alteraes no arquivo, necessrio recarregar a configurao para que elas entrem em vigor: # service httpd reload

Fazendo dessa forma, os logs de acessos sero misturados no log principal do Apache, o "/var/log/apache2/access.log". Isso no problema se voc est utilizando o Google Analytics ou outra ferramenta externa para auditar os acessos dos sites (ou se simplesmente voc no est preocupado em medir os acessos), mas um grande obstculo se voc pretende usar o webalizer para gerar os relatrios de acesso. Para que cada site tenha seus logs separados, voc deve adicionar duas linhas adicionais, na configurao de cada virtual host, especificando a localizao do arquivo que ser usado. Voc com certeza no gostaria que os logs ficassem disponveis ao pblico, por isso importante usar diretrios diferentes para os arquivos do site e para os logs, como em: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao/html ErrorLog /var/www/joao/logs/error.log CustomLog /var/www/joao/logs/access.log combined </VirtualHost> Voc pode tambm salvar os logs na pasta de logs padro do Apache, de forma a se beneficiar do rotacionamento automtico de logs oferecido pelo logrotate. Nesse caso, voc precisa apenas especificar um arquivo de log diferente para cada site, todos salvos dentro da pasta padro, como em: <VirtualHost *:80> ServerAdmin joao@joao.com.br ServerName www.joao.com.br ServerAlias joao.com.br www.joao.com.br DocumentRoot /var/www/joao/html ErrorLog /var/log/apache2/joao.error.log CustomLog /var/log/apache2/joao.access.log combined

</VirtualHost> Note que, como todos os sites ficam hospedados no mesmo servidor, a nica forma de chegar ao site desejado fazendo o acesso atravs do domnio. Se voc tentar acessar diretamente o IP do servidor, vai cair no site padro (configurado atravs do arquivo "/etc/apache2/sites-available/default"), que, por padro, usa o raiz da pasta "/var/www". Esta pgina default pode ser usada para mostrar alguma publicidade da empresa responsvel pelo servidor, ou uma lista dos sites hospedados, por exemplo.

Otimizando a configurao do servidor


Ao colocar um site no ar, seu objetivo quase sempre fazer com que ele seja acessado pelo maior volume possvel de visitantes. Entretanto, o sucesso tem um preo: o maior volume de requisies faz com que seu servidor web seja mais exigido e ele passe a consumir mais recursos da mquina. A partir de um certo ponto, o servidor passar a ficar saturado nos horrios de maior acesso, tornando o acesso ao site lento e fazendo com que o site comece a perder visitantes. Uma das solues seria simplesmente atualizar o hardware do servidor, resolvendo o problema na base da fora bruta. A segunda seria otimizar a configurao do Apache, fazendo com que ele trabalhe de forma mais eficiente. No existe uma "configurao perfeita" para o Apache, j que a configurao ideal varia de acordo com o tipo de trfego do site, mas aqui vo algumas dicas que podem ajudar. Uma das configuraes mais diretamente relacionadas performance do servidor e ao consumo de memria o nmero de instncias do servidor httpd. O Apache capaz de responder a um nmero indefinido de acessos simultneos, de acordo com a velocidade do link e dos recursos da mquina. Para cada requisio simultnea, necessrio que exista uma instncia do Apache carregada na memria. Quando o cliente acessa uma pgina, ele monopoliza uma dessas instncias abertas at que a requisio seja concluda, ou seja, at que a pgina seja carregada ou o arquivo baixado. Em horrios de alta demanda, so abertas mais instncias do servidor Apache, que vo sendo fechadas (para economizar memria) conforme os acessos diminuem. Nos momentos de pico, o Apache precisa manter mais processos ativos, o que aumenta o consumo de memria no servidor. O uso de processamento, por sua vez, varia bastante de acordo com o tipo de pginas servidas. Pginas em PHP com cdigo no otimizado, scripts em CGI ou servlets Java, por exemplo, podem consumir bastante processamento, fazendo com que o processador se torne um gargalo muito antes da memria RAM, enquanto pginas estticas ou arquivos disponibilizados para download consomem pouco processamento, fazendo com que a memria RAM e a otimizao do servidor sejam as principais prioridades.

Ajustando o nmero de processos


O primeiro passo verificar se est sendo usado o mdulo mpm-prefork (usado por default na maioria das distribuies) ou o mdulo mpm-worker, j que ambos so configurados em sees diferentes do arquivo. No caso das distribuies derivadas do Debian, as duas verses so disponibilizadas atravs de pacotes separados, de forma que voc precisa apenas verificar qual dois dois est instalado, usando o comando "dpkg -l | grep apache". Ele retornar uma lista como: # dpkg -l | grep apache ii apache2 2.2.3-4+etch4 Next generation, scalable, extendable web se ii apache2-mpm-prefork 2.2.3-4+etch4 HTTPD 2.1 ii ii ii apache2-utils apache2.2-common 2.2.3-4+etch4 2.2.3-4+etch4 1.10-2 an utility Next programs for webservers exten with compat generation, scalable, Traditional model for Apache

libapache2-mod-fcgid

alternative

module

mod_fastcg ii libapache2-mod-php5 5.2.0-8+etch11 server-side, HTML-embedded scri No exemplo, podemos ver que est sendo usado o pacote "apache2-mpm-prefork", que justamente a verso usada por padro. O mpm-prefork a verso tradicional do Apache, onde cada instncia inicia um nico thread e atende a uma nica requisio por vez, isolando o processamento de cada pgina servida. Isso torna a operao do servidor mais estvel e menos vulnervel a mdulos ou pginas mal escritas, mas, em compensao, consome um pouco mais de memria RAM que o mpm-worker, onde cada instncia do Apache pode abrir vrios threads, de acordo com a necessidade. Para pequenos servidores, onde voc no precise necessariamente extrair cada gota de desempenho do servidor, o mpm-prefork a escolha mais segura, mas em casos em que o servidor precise operar no limite, voc pode realizar testes com o mpm-worker de forma a avaliar se a reduo no consumo de memria significativa. Voltando configurao, o nmero de instncias abertas (ao usar o mpm-prefork) determinada pela seo abaixo dentro do arquivo "/etc/apache2/apache2.conf": # prefork MPM

<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> A opo "StartServers" determina o nmero padro de instncias do Apache que ficaro carregadas na memria, respondendo a requisies. Cada instncia ocupa cerca de 7 MB de memria (variando de acordo com as opes de compilao usadas ao gerar o pacote e os mdulos carregados), de forma que 5 instncias consomem cerca de 35 MB de memria do servidor. Alm das instncias principais, temos instncias "reservas" (spares), que ficam disponveis para absorver rapidamente picos de acesso, sem que o Apache tenha que perder tempo carregando mais instncias para s depois comear a responder s requisies. As opes "MinSpareServers" e "MaxSpareServers" determinam o nmero mnimo e mximo de "reservas", sendo que o nmero real flutua entre os dois parmetros, de acordo com a demanda. A opo "MaxClients" a parede de concreto, o nmero mximo de conexes simultneas que o Apache aceita manter abertas, independentemente da demanda. Quando esse nmero atingido, o acesso ao site fica cada vez mais lento, pois cada novo visitante "entra na fila" e precisa esperar que uma das instncias do Apache fique livre, antes de conseguir carregar cada pgina. Essa configurao default do Apache adequada a um site de baixa demanda, onde o servidor passa a maior parte do tempo atendendo a um pequeno volume de requisies simultneas, mas recebe picos de trfego esporadicamente. Por padro, o servidor carregar apenas 5 processos, manter mais 5 a 10 spares ativos e poder carregar mais instncias conforme necessrio, at o limite mximo de 150 instncias permitidas. Para um servidor dedicado, que hospede um site com muitas visitas, interessante ajustar estes valores de acordo com a demanda. Uma forma fcil de verificar o

status

do

servidor

ativar

diretiva

"server-status"

dentro

do

arquivo

"/etc/apache2/apache2.conf". Adicione as linhas abaixo no final do arquivo: <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 200.234.23.233 # (onde o 200.234.23.233 o IP de onde o relatrio ser acessado) </Location> Ative a configurao usando o comando "/etc/init.d/apache2 reload". A partir da, voc pode ver um instantneo do status do servidor acessando a pasta "serverstatus", como em "http://www.gdhn.com.br/server-status", a partir do navegador. A oitava linha indica o nmero de instncias abertas, como em: 8 requests currently being processed, 5 idle workers Nesse exemplo temos 8 conexes abertas e 5 instncias reservas do Apache abertas, prontas para receber novas conexes. A velocidade do acesso ao site est normal. Mas, o que acontece no caso de um pico de acesso, com mais do que 150 acessos simultneos? Na configurao padro voc teria: 150 requests currently being processed, 0 idle workers Ou seja, o Apache responde s primeiras 150 conexes e coloca as demais na fila, fazendo com que os visitantes precisem esperar at que algum dos processos abertos termine de atender o visitante anterior antes de servirem a requisio. Nesse ponto o acesso ao site comea a ficar lento, com as pginas demorando mais e mais para comearem a ser carregadas. Em casos mais extremos, o tempo de espera poderia ser tamanho que o site ficaria virtualmente fora do ar. o que muitas vezes acontece com links publicados em sites muito acessados, como o slashdot.org. Isso pode ser minimizado de duas formas. A primeira aumentando o nmero de instncias ativas do Apache (de forma que o servidor tenha instncias suficientes para atender a todas as requisies sem precisar abrir novos processos) e

aumentando o valor configurado na opo "MaxClients", de forma que o servidor possa atender a um volume maior de requisies nos horrios de pico. Os valores ideais variam de acordo com o volume de memria disponvel no servidor e a quantidade de memria usada por cada processo do Apache. Comece usando o comando "ps -ylC apache2 --sort:rss" (no Debian/Ubuntu) ou "ps -ylC httpd --sort:rss" (no Fedora/CentOS) para verificar o volume de memria usado por cada instncia do Apache: # ps -ylC apache2 --sort:rss O comando exibe uma linha para cada processo do Apache ativo, de forma que a lista pode ser longa. O volume de memria gasto por cada um (em kbytes) mostrado na oitava coluna. Descartando as primeiras e as ltimas linhas, voc tem uma boa aproximao dos valores mdios, como em: S S S S 33 33 33 33 17530 17491 17529 17472 16102 16102 16102 16102 0 0 0 0 78 75 75 75 0 6008 5038 0 6036 5036 0 6036 5038 0 6044 5038 341548 354540 357283 359161 ? ? ? ? 00:00:00 00:00:00 00:00:00 00:00:00 apache2 apache2 apache2 apache2

S 33 17438 16102 0 75 0 6056 5036 351130 ? 00:00:00 apache2 Veja que no exemplo cada processo consome aproximadamente 6 MB de memria RAM. Estes valores no devem ser levados ao p da letra, pois o ps no leva em conta as reas de memria compartilhadas entre os processos, de forma que na prtica o consumo total sempre um pouco mais baixo. De qualquer forma, estes so os melhores nmeros que temos. O prximo passo verificar quanto os demais servios ativos no servidor (MySQL, servidor de e-mails, etc.) consomem, de forma a ter uma estimativa de quanta memria est disponvel para uso do Apache. Uma forma simples de fazer isso desativar temporariamente o Apache (/etc/init.d/apache2 stop) e usar o comando "free" para ver a memria disponvel, como em: # free Total used free shared buffers cached Mem: 127132 124640 2492 0 40732 45236 -/+ buffers/cache: 35804 91328 Swap: 409616 48 409568

A linha "Mem" mostra o total de memria usada, incluindo o cache de disco. Ela sempre mostra que quase toda a memria est ocupada, pois normal que o sistema utilize a memria disponvel para fazer cache de disco. O que realmente nos interessa a segunda linha (-/+ buffers/cache), que no exemplo mostra que o servidor possui cerca de 90 MB de memria disponvel (nesse exemplo estou usando um VPS com apenas 128 MB de memria, que serve como exemplo de servidor com poucos recursos). Se cada processo do Apache ocupa cerca de 6 MB de memria, significa que o servidor poderia manter de 15 a 18 instncias carregadas na memria (levando em conta que o consumo real sempre um pouco inferior ao mostrado pelo ps) antes de comear a usar um volume significativo de memria swap. Uma boa configurao nesse caso seria: # prefork MPM <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 18 MaxRequestsPerChild 0 </IfModule> Permitir que o Apache abra mais instncias acabaria sendo contra produtivo, pois o uso de muita memria swap derrubaria o desempenho do servidor, fazendo com que cada instncia demorasse mais para processar cada pgina. Com isso, o nmero total de pginas servidas acabaria sendo menor do que usando apenas 18 processos. No caso de um servidor com 1 GB de memria RAM, por outro lado, provavelmente teramos 900 MB ou mais de memria disponvel para o Apache, de forma que uma configurao mais adequada seria: # prefork MPM <IfModule mpm_prefork_module> StartServers 25

MinSpareServers 25 MaxSpareServers 50 MaxClients 200 MaxRequestsPerChild 0 </IfModule> Com isso, teramos 25 processos "fixos" do Apache, complementados por mais 25 a 50 spares, nmero que pode crescer at um mximo de 200 processos simultneos nos horrios de pico. A partir da, voc poderia monitorar o volume de memria livre no servidor (atravs do comando "free") e o volume de acessos atravs da pgina de estatsticas e ajustar as opes "StartServers" e "MinSpareServers" de acordo com o nmero mdio de acessos simultneos, de forma que o nmero de processos do Apache e de spares disponveis seja sempre um pouco maior do que o nmero mdio de conexes ao servidor:

Outras opes
A opo "MaxRequestsPerChild", includa logo depois no arquivo, limita o nmero de requisies que cada processo do Apache pode responder antes de ser encerrado e substitudo por outro. Ela no tem um efeito direto sobre o desempenho, servindo apenas como uma proteo contra eventuais vazamentos de memria, que pudessem fazer o processo crescer at ocupar toda a memria do servidor. Uma boa configurao o valor "1000", que evita que os processos sejam fechados muito freqentemente (o que prejudicaria o desempenho), mas ao mesmo tempo faz com que a opo atenda a seu propsito: MaxRequestsPerChild 1000 Como de praxe, a soluo definitiva para melhorar o desempenho do servidor, permitindo que ele atenda a mais requisies simultneas, instalar mais memria RAM, de forma que ele possa manter mais instncias do Apache carregadas na memria e possa fazer mais cache de disco (reduzindo o volume de operaes de leitura no HD). importante monitorar constantemente o uso de memria do servidor e atualizar o servidor conforme necessrio. Outra opo que afeta negativamente o desempenho a "HostNameLookups", que faz com que o Apache verifique a origem de cada acesso, fazendo uma busca de domnio. Ativar essa opo permite criar estatsticas de acesso mais detalhadas, incluindo os pases e provedores de acesso usados pelos visitantes, mas tem um impacto negativo muito grande na performance de um servidor congestionado. No Apache 2 ela j vem desativada por padro, mas em verses antigas era necessrio desativ-la manualmente: HostNameLookups Off Se voc faz questo de gerar estatsticas de acesso detalhadas, pode obter o mesmo resultado usando o "logresolve", um aplicativo que realiza as operaes de resoluo de nomes diretamente nos arquivos de log. Voc pode criar um script para fazer com que ele seja executado uma vez por dia, por exemplo. A sintaxe do comando a seguinte: # logresolve -s access.stats -c < access.log > access_log.new No exemplo, o "access.log" o arquivo original de log, o "access_log.new" o arquivo modificado que ser gerado e o "access.stats" o arquivo onde sero salvas as estatsticas.

Continuando, se o seu servidor j est operando no limite, recebendo mais requisies do que consegue atender nos horrios de pico, uma foma simples de reduzir o carregamento do servidor ajustar a opo "KeepAliveTimeout", que determina o tempo que os processos do Apache devem aguardar por novas requisies do mesmo cliente antes de serem finalizadas. A idia por trs dessa opo permitir que a mesma conexo TCP seja usada para enviar diversos arquivos, se possvel toda a pgina que est sendo carregada, incluindo as imagens. Com isso, o tempo de carregamento reduzido (j que no mais necessrio abrir uma nova conexo para cada elemento da pgina a ser carregado) e os processos do Apache ficam logo livres para responder a outras requisies. O default so 15 segundos, o que um valor seguro, j que mesmo as conexes mais lentas no chegam a ter um tempo de latncia to alto. O problema que o tempo de espera faz com que os processos fiquem ativos na memria por at 15 segundos a mais do que realmente precisariam, consumindo memria e reduzindo o nmero de clientes simultneos que o servidor pode atender. Voc pode aumentar de forma considervel o volume de requisies atendidas pelo servidor reduzindo o valor de 15 para 3 segundos. Um exemplo de configurao completa : KeepAlive On MaxKeepAliveRequests 180 KeepAliveTimeout 3 A opo "KeepAlive On" deve estar presente, j que ela a responsvel por ativar o recurso. A opo "MaxKeepAliveRequests" determina o nmero mximo de conexes que devem ser mantidas ativas. Ela deve ser setada com um valor um pouco mais baixo que o da opo "MaxClients", que vimos anteriormente. Concluindo, voc pode simular trfego no seu servidor, verificando como ele se comporta com nveis variados de trfego usando o comando "ab", que faz parte do pacote "apache2-utils". Chame-o indicando o nmero de requisies simultneas e a pgina que ser carregada, como em: $ ab -n 1000 -c 20 http://www.meusite.com/teste.php

Nesse exemplo, estamos fazendo 1000 acessos pgina, mantendo 20 requisies simultneas. Se possvel, lance o teste a partir de outro servidor com link rpido, ou pea para vrios amigos rodarem o comando simultaneamente, cada um usando sua prpria conexo. Isso transformar o teste em algo mais parecido com uma situao normal, onde o servidor receba um pico de acessos. Uma opo que no tem a ver com o desempenho, mas que ajuda a reduzir o volume de ataques casuais contra o seu servidor a opo "ServerTokens". Na maioria das distribuies, ela vem configurada com o valor "Full", que faz com que seu servidor disponibilize informaes detalhadas sobre a verso do apache e os mdulos utilizados, como "Apache/2.2.3 Debian PHP/5.2.0-8etch11", o que facilita bastante o trabalho dos atacantes. Voc pode evitar isso configurando a opo com o valor "Prod", que faz com que o servidor responda apenas "Apache", sem nenhum detalhe adicional (caso a linha no esteja presente, basta adicion-la no final do arquivo): ServerTokens Prod Outra configurao importante bloquear o acesso a includes e arquivos de configurao em geral colocados dentro dos diretrios de dados do site. Isso evitar que arquivos .inc, .tpl, .sql e de outras extenses tipicamente usadas em arquivos de configurao e em includes usados na montagem das pginas possam ser acessados diretamente pelos visitantes. Para isso, inclua na configurao uma seo "filesmatch", especificando as extenses cuja exibio deve ser bloqueada, como em: <filesmatch .(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|sh|theme|module)$"> Deny from all </filesmatch> Depois de terminar a edio do arquivo "/etc/apache2/apache2.conf", no se esquea de aplicar as alteraes usando o comando: # /etc/init.d/apache2 reload ou: # service httpd reload

Das könnte Ihnen auch gefallen