Você está na página 1de 29

Instalando um servidor LAMP

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. Outros recursos populares so a encriptao de pginas em SSL, necessrio para a criao de pginas seguras (usadas em lojas virtuais, por exemplo) e sistemas de gerao de relatrios de acesso, como o Webalizer. Alm do servidor web em si, voc quase sempre vai precisar configurar tambm um servidor DNS, que responder pelo domnio do seu site ou empresa. Aprender a configurar o DNS corretamente importante, caso contrrio voc pode ter problemas ao enviar emails (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 servi dor uma forma de economizar recursos e trabalho. Ao hospedar vrios sites, passamos a ter dois novos problemas: precisamos oferecer alguma forma de acesso aos arquivos, para que os responsveis possam atualizar suas pginas sem alterar os arquivos dos vizinhos, e precisamos de um sistema de quotas, para que cada um tenha sua fatia justa de espao em disco. Criamos, ento, vrios logins de acesso e configuramos um servidor FTP, para que cada um tenha acesso a seus prprios arquivos, mas sem ter como alterar os demais. Apesar de muito usado, o FTP inseguro. Ele na verdade um servidor de arquivos de uso geral, que no est limitado ao uso em conjunto com um servidor web. muito comum usar um servidor FTP para disponibilizar arquivos para download pblico , por exemplo. No captulo 10 veremos como usar o SFTP e o SHFS, que permitem acesso seguro, atravs de um tnel encriptado. Completando o time, temos o Quota, que permite limitar o espao em disco usado por cada usurio, garantindo uma diviso justa dos r ecursos disponveis. Ao atingir seu limite, o usurio recebe uma mensagem de "disco cheio", mesmo que ainda existam vrios GB's livres no HD do servidor.

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 m dulos 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 f icavam 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. Apesar disso, ainda existem casos de distribuies que continuam oferecendo as duas verses, de forma a satisfazer os dois pblicos. No Debian Etch, por exemplo, o Apache 1.3 instalado atravs do pacote "apache", enquanto o Apache 2 (a verso recomendada) instalado atravs do "apache2". Entretanto, no Debian Lenny j est disponvel apenas o Apache 2, assim como no CentOS, no Fedora e em outras distribuies. Ao instalar o Apache 2, o suporte a SSL instalado automaticamente junto com o pacote principal (mas ainda preciso ativ-lo na configurao, como veremos a seguir). 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 "sslcert", 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 # # chkconfig httpd on service httpd start

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, como veremos ao longo do restante deste captulo. Instalao a partir do cdigo fonte: Muitos administradores preferem instalar o Apache a partir dos fontes, o que oferece um controle maior sobre os recursos que ficaro ou no ativos. De uma forma geral, instalar a partir do cdigo fonte s uma boa idia se voc conhece muito bem o software e no est satisfeito com as opes de compilao usadas nos pacotes includos na distribuio. Alm da instalao e da configurao inicial, voc precisar tambm se preocupar com patches e atualizaes de segurana, j que voc no poder contar com as atualizaes disponibilizadas atravs do apt-get ou do yum. Ou seja, se voc no est confiante de que vai ter o tempo e o conhecimento necessrios para realizar um trabalho de manuteno melhor do que o realizado pelos mantenedores do

Debian, Ubuntu, CentOS ou do Fedora, voc estar melhor servido simplesmente usado os pacotes pr-compilados. :) De qualquer forma, se voc quer encarar o desafio, pode baixar o cdigo fonte no: http://httpd.apache.org/. Lembre-se de que para instalar qualquer aplicativo a partir dos fontes, voc precisa ter instalados os compiladores e bibliotecas de desenvolvimento. Os passos bsicos so descompactar o pacote, acessar a pasta que ser criada e executar o trio "./configure", "make" e "make install", este ltimo como root. Isso resultar em uma instalao padro, onde todos os arquivos so instalados no diretrio "/usr/local/apache2". Para personalizar as opes (que seria o principal motivo de instalar a partir dos fontes, afinal), voc deve passar as opes desejadas ao executar o "./configure", como em: $ ./configure --prefix=/etc/apache2 --exec-prefix=/usr --bindir=/usr/bin \ \ \

--sbindir=/usr/sbin

--mandir=/usr/share/man

--sysconfdir=/etc/apache2/conf

--includedir=/usr/include/httpd

--libexecdir=/usr/lib/httpd/modules

--datadir=/var/www/ --with-mpm=prefork --enable-mods-shared="rewrite" Como pode ver, as opes incluem no apenas os diretrios de instalao, mas tambm os mdulos que sero ativados e diversas outras opes de configurao. Ao instalar a partir do cdigo fonte, a ativao e a desativao do servidor feita usando o script "apachectl", que substitui o "/etc/init.d/apache2" ou o "service httpd", como em: # apachectl start ou: # apachectl restart

Entendendo a organizao dos arquivos

A principal caracterstica do Apache a modularidade. Ao invs de ser um aplicativo grande e complexo, que tenta desempenhar sozinho todas as funes, o Apache s e limita a executar uma nica tarefa: entregar pginas html e outros tipos de arquivos aos clientes. Qualquer outra coisa invariavelmente feita por um mdulo externo. Por exemplo, quando voc acessa uma pgina em PHP em um site que roda sobre um servidor Apache, ele (Apache) l o arquivo no disco e repassa a requisio para o mod_php, o mdulo encarregado de processar arquivos PHP. Ele, por sua vez, aciona o interpretador PHP, que processa a pgina e a entrega, j processada, ao Apache, que, finalmente, a entrega ao cliente. Caso seja necessrio acessar um banco de dados (como no caso de um frum ou de um gestor de contedo), entra em ao outro mdulo, como o php5 -mysql, que permite ao interpretador PHP acessar o banco de dados:

Pode parecer estranho que depois de toda essa volta o Apache ainda consiga entregar a pgina processada em tempo hbil, mas justamente essa diviso de tarefas que permite ao Apache ser to rpido e seguro. O trabalho dividido em vrias partes e cada mdulo mantido separadamente por uma equipe que entende do assunto e zela pelo desempenho e confiabilidade do cdigo. Graas a isso, bastante raro que sejam descobertos problemas graves de segurana no Apache ou no interpretador PHP, por exemplo. Quase sempre, os problemas de segurana no esto no servidor Web em si, mas sim no gestor de contedo (phpNuke, Xoops, phpBB, etc.) usado.

No Debian e derivados

Nas distribuies derivadas do Debian, a arquitetura modular do Apache extendida tambm aos arquivos de configurao. Tradicionalmente, a configurao do Apache centralizada em um nico arquivo, o "httpd.conf", que pode opcionalmente incluir referncias a arquivos externos (includes) que permitem segmentar e organizar a configurao. Aproveitando esta possibilidade, a equipe do Debian desenvolveu uma organizao bastante prtica, que usada tambm no Ubuntu e em outras distribuies derivadas dele. primeira vista, a organizao do Apache 2 nas distribuies derivadas do Debian parece muito mais complicada, mas, depois de entender, a coisa se revela bastante simples e lgica:

Todos os arquivos de configurao esto organizados dentro do diretrio "/etc/apache2". Dentro dele, temos as pastas "sites-available" e "sites-enabled", que contm a configurao dos sites hospedados; as pastas "mods-available" e "mods-enabled", que armazenam a configurao dos mdulos; o arquivo "ports.conf", onde vai a configurao das portas TCP que o servidor vai escutar; o arquivo "apache2.conf", que armazena configuraes diversas relacionadas ao funcionamento do servidor e a pasta "conf.d", que armazena arquivos com configuraes adicionais. O Apache capaz de hospedar simultaneamente vrios sites, cada um representado por um arquivo de configurao diferente. Imagine o caso de uma empresa de hosting que mantm um servidor com 2.000 pequenos sites. Quando cada cliente registra seu site e assina o

plano de hospedagem, voc cria um novo arquivo dentro da pasta "sites-available" com as configuraes necessrias e um link para ele na pasta "sites-enabled". Como os nomes sugerem, a primeira pasta armazena a configurao de todos os sites (virtual hosts) hospedados no servidor, mas apenas os sites que estiverem presentes na pasta "sites-enabled" ficam disponveis. Quando necessrio suspender temporariamente um site por falta de pagamento, por exemplo, voc simplesmente remove o link na pasta "sites-enabled", sem precisar mexer na configurao. Ao invs de criar e remover os links manualmente, voc pode usar os comandos "a2ensite" e "a2dissite", que fazem isso para voc. Para ativar e desativar um site configurado no arquivo "/etc/apache2/sites-available/gdhn", por exemplo, os comandos seriam: # (ativa) # (desativa) Quando o Apache instalado, criado por padro o arquivo "/etc/apache2/sitesavailable/default", que contm a configurao de um site "raiz", que usa (por padro) a pasta "/var/www" como diretrio de pginas. Se o seu servidor web vai hospedar um nico site, ento essa configurao suficiente, mas, caso voc queira hospedar vrios sites no mesmo servidor, necessrio criar uma pasta e um arquivo de configurao para cada site adicional. Seu servidor pode, por exemplo, hospedar o "joao.com.br" e o "maria.com.br". Um servidor DNS, mantido por voc, configurado para responder pelos dois domnios, em ambos os casos fornecendo o endereo IP do seu servidor web aos clientes. Na configurao do apache, criamos os arquivos "/etc/apache2/sites-available/joao" e "/etc/apache2/sitesavailable/maria", cada um configurado para utilizar uma pasta diferente. De acordo com sua preferncia, podem ser usadas pastas dentro do diretrio home de cada usurio, como em "/home/joao/html" e "/home/maria/html", ou subpastas dentro do diretrio "/var/www", como em "/var/www/joao" e "/var/www/maria". Quando um visitante digita "http://joao.com.br", o servidor do Registro.br (que responde pelos domnios .br) vai passar a requisio para seu servidor DNS, que responde com o endereo do seu servidor web. Ao acessar o servidor, o navegador solicita o site "joao.com.br" e o servidor responde enviando o arquivo "/var/www/joao/index.html" ou "index.php" ao cliente. Esta configurao parece bem complicada primeira vista, mas na prtica relativamente simples. Veremos mais detalhes sobre a configurao de servidores Apache com vrios domnios mais adiante. Continuando, a mesma idia das duas pastas separadas se aplica aos mdulos. A pasta "mods-available" contm a configurao e scripts de inicializao para todos os mdulos disponveis, mas apenas os mdulos referenciados (atravs de um link) na pasta "modsenabled" so realmente carregados. a2dissite gdhn a2ensite gdhn

Muita gente simplesmente cria e deleta os links manualmente, mas isso pode ser feito mais rapidamente usando os comandos "a2enmod" e "a2dismod", que ativam e desativam mdulos especficos. Para desativar o suporte a PHP, por exemplo, voc usaria o comando: # a2dismod php5 Para ativ-lo novamente, usaria: # a2enmod php5 Uma vez que um determinado mdulo ativado, ele fica automaticamente disponvel para todos os sites hospedados no servidor. Para que a alterao entre em vigor, necessrio reiniciar o servio, usando o comando "/etc/init.d/apache2 force-reload" ou o "/etc/init.d/apache2 restart" (no Debian os dois comandos fazem exatamente a mesma coisa): # /etc/init.d/apache2 force-reload Por outro lado, ao ativar ou desativar sites, ou ao fazer alteraes simples na configurao, voc pode utilizar o comando "/etc/init.d/apache2 reload" (sem o "force"), que apenas atualiza a configurao, sem reiniciar o servio: # /etc/init.d/apache2 reload A vantagem de usar o reload em vez do force-reload que ele no precisa finalizar os processos do Apache, o que evita que o servidor fique indisponvel durante a reinicializao do servio. Em um servidor movimentado, com um grande volume de sites hospedados e um grande volume de acessos, reiniciar o servidor web um processo caro, que causa interrupo do servio e perda de acessos, da as duas opes. Outra configurao que foi desmembrada a configurao de portas, que foi para o arquivo "ports.conf". Originalmente o arquivo vem com uma nica linha: Listen 80 aqui que voc altera a porta padro do seu servidor ou adiciona novas portas, como faremos mais adiante ao ativar o SSL, por exemplo. Voc pode tambm usar portas diferentes caso precise manter mais de um servidor web ativo na mesma mquina (muitos administradores usam este truque para testar novas verses do Apache, ou para combin-lo com um segundo servidor web, como o lighttpd, configurado para servir arquivos e pginas estticas). Outro uso comum para a opo (em casos em que voc quer disponibilizar um servidor web domstico) para burlar as restries das operadoras de planos de acesso, que geralmente bloqueiam conexes na porta 80, de forma a dificultar o uso de servidores web nas conexes domsticas. Para fazer com que seu servidor escute tambm na porta 443 (a porta do HTTPS) e na porta 8080, por exemplo, voc adicionaria duas novas linhas, como em:

Listen 80 Listen 443 Listen 8080 Finalmente, chegamos ao arquivo "apache2.conf", que agrupa o "resto" das configuraes. ele que voc vai alterar quando, por exemplo, precisar ajustar o nmero de processos usados pelo Apache ou aumentar o nmero de conexes simultneas permitidas pelo servidor, como veremos em detalhes mais adiante.

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/modsavailable/", 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 AddHandler AddType 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. php5_module php5-script text/html modules/libphp5.so .php .php

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 "php4mysql"), 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.

Administrao bsica do banco de dados

Existem muitas interfaces de administrao para o MySQL, mas a forma mais elementar usar o prompt de comando. Para acess-lo, use o comando: # mysql -u root -p <enter> Enter password: <senha> Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 43 to server version: 4.0.15 -log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Veja que o cabealho normal do bash foi substitudo por um "mysql>", que lembra onde voc est. Para sair, pressione "Ctrl+C" ou execute o comando "quit". Dentro do prompt do MySQL, use o comando "CREATE DATABASE" (criar base de dados), seguido pelo nome desejado. Neste exemplo, estou criando uma base de dados para usar na instalao do phpBB, que veremos a seguir. Um detalhe importante que todos os comandos dados dentro do prompt do MySQL devem terminar com ponto -e-vrgula: mysql> CREATE DATABASE phpbb; Query OK, 1 row affected (0.04 sec)

Para confirmar, use o comando "SHOW DATABASES", que lista as bases de dados criadas no servidor, como em: mysql> SHOW DATABASES; +--------------------+ | +--------------------+ | | | | +--------------------+ information_schema mysql phpbb test | | | | Database |

Note que alm da base "phpbb" que criamos, existem mais trs bases de dados, criadas durante a instalao. As bases "mysql" e "information_schema" so para uso interno do MySQL, incluindo o armazenamento das configuraes (sendo um banco de dados, o MySQL usa a si mesmo para armazenar suas configuraes :), enquanto a base "test" uma DB vazia, que pode ser usada para fins de teste. Temos em seguida a questo das permisses de acesso. Nada impede que voc sempre utilize a conta "root" do MySQL e inclusive configure os scripts instalados para a utilizarem. Entretanto, isso extremamente inseguro, principalmente se voc pretende instalar vrios scripts e aplicativos no mesmo servidor, ou se as bases de dados sero acessadas por vrios usurios. O ideal que cada base de dados tenha um usurio prprio e seja acessvel apenas por ele. Se voc vai instalar o phpBB (frum) e o WordPress (gerenciador de contedo), por exemplo, crie duas bases de dados ("phpbb" e "wordpress", por exemplo) e dois usurios separados, cada um com permisso para acessar uma das duas bases. Na configurao de cada um dos gestores, informe a base de dados que ser usada e o usurio e senha correspondente. Isso evita que eventuais problemas de segurana em um coloquem em risco tambm os dados referentes ao outro. Outra situao comum ao configurar um servidor com vrios virtual hosts. Nesse caso, o webmaster de cada site vai precisar de uma ou mais bases de dados e, naturalmente, cada um vai precisar de um login prprio, com acesso apenas s suas prprias bases de dados. Para criar um usurio "phpbb", com senha "nDPIcqq9" e dar a ele acesso base de dados "phpbb" que criamos, use (dentro do prompt do MySQL) o comando: mysql> GRANT ALL ON phpbb.* TO phpbb IDENTIFIED BY 'nDPIcqq9'; (permita tudo na base phpbb para o usurio phpbb, identificado pela senha nDPIcqq9) mysql> FLUSH PRIVILEGES;

O comando "FLUSH PRIVILEGES" faz com que o servidor MySQL atualize as tabelas de permisses, fazendo com que a alterao entre em vigor automaticamente, ao invs de apenas na prxima vez que o servidor for reinicializado. Na verdade, ele no necessrio ao adicionar usurios usando o comando "GRANT" (como no nosso caso), mas saudvel se acostumar a utiliz-lo sempre que usar comandos que modifiquem as permisses de acesso. Voc vai notar que a maioria dos tutoriais inclui o comando depois das operaes relacionadas a alteraes nas permisses de acesso. Continuando, para trocar a senha posteriormente, use o comando: mysql> SET PASSWORD FOR phpbb = PASSWORD('JSAm950A'); (defina senha para o usurio phpbb, onde a senha JSAm950A) Este mesmo comando pode ser usado para trocar a senha do root, como em: mysql> SET PASSWORD FOR root = PASSWORD('V5LQSxqL'); Se mais tarde voc precisar remover as permisses de acesso de um usurio anteriormente criado (em um site com vrios webmasters, onde um se desligou da equipe, por exemplo) use o comando: mysql> REVOKE ALL ON phpbb.* FROM phpbb; (remova todos os direitos para a base phpbb, para o usurio phpbb) mysql> FLUSH PRIVILEGES; Com isso, o usurio deixar de ter acesso base de dados especi ficada, mas ainda continuar existindo no sistema e poder acessar outras bases de dados a que tenha acesso. Para realmente remover o usurio, usamos o comando "DROP USER", como em: mysql> DROP USER phpbb O comando "DROP USER" suportado apenas pelas verses recentes do MySQL. Caso voc esteja usando uma verso antiga, onde ele ainda no seja suportado, pode usar o comando "DELETE FROM mysql.user WHERE User=", como em: mysql> DELETE FROM mysql.user WHERE User='phpbb'; Para remover uma base de dados, use o comando "DROP DATABASE", como em: mysql> DROP DATABASE phpbb; Todos estes comandos devem ser dados dentro da base de dados "mysql", a base de dados interna usada pelo MySQL, acessada por default ao abrir a interface. Se, por acaso, voc tiver mudado a base de dados de trabalho anteriormente (usando o comando USE), use o comando abaixo para voltar base administrativa: mysql> USE mysql;

Veja que os comandos usados dentro do prompt do MySQL seguem uma linguagem literal, usando palavras do ingls. Quem tem uma boa familiaridade com a lngua tem bem mais facilidade em dominar os comandos. Outra observao que os comandos no so case sensitive. Tanto faz escrever "CREATE DATABASE phpbb;" ou "create database phpbb;". Escrever os comandos em maisculas apenas uma forma de dar mais destaque a eles.

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, como veremos no tpico seguinte. 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. Veremos em detalhes como usar o SSH e criar tneis encriptados no captulo dedicado a ele.

Ativando o SSL

O SSL (Secure Socket Layer) o protocolo usado para criar pginas seguras, encriptando toda a transmisso entre o cliente e o servidor. Os dois usos mais comuns so em pginas de comrcio eletrnico, onde necessrio oferecer um ambiente seguro para concluir a transao e transmitir dados confidenciais e tambm na criao de ambientes administrativos, como os usados pela maioria dos gestores de contedo, que permitem que voc gerencie o contedo do site. Na grande maioria das distribuies, o pacote com o mod_ssl instalado juntamente com o pacote principal do Apache, ou pelo menos disponibilizado como um pacote separado, instalvel atravs do gerenciador de pacotes. No caso das distribuies derivadas do Debian, voc precisa apenas ativar o mdulo usando o comando "a2enmod". Reinicie o servio para que a alterao entre em vigor: # # /etc/init.d/apache2 force-reload No caso do CentOS, necessrio instalar o pacote "mod_ssl" usando o yum. O script de ps-instalao se encarrega de adicionar o script de carregamento na pasta a2enmod ssl

"/etc/httpd/conf.d" automaticamente, concluindo a instalao. No se esquea de reiniciar o servio para que a alterao entre em vigor: # yum install mod_ssl

# service httpd restart Com o mdulo carregado, fica faltando apenas o componente mais importante, que o certificado SSL propriamente dito. Se voc quer ativar o SSL para testes ou para uso interno (para acessar alguma ferramenta administrativa instalada no servidor, ou para uso em uma pgina disponibilizada apenas para um grupo de amigos, por exemplo), voc pode simplesmente gerar seu prprio certificado, o que rpido, grtis e indolor. Se, por outro lado, voc est ativando o SSL para uso em um site de comrcio eletrnico, necessrio obter um certificado reconhecido atravs da Verisign ou outra entidade certificadora. Os certificados caseiros so chamados de certificados self-signed (auto-assinados), j que voc mesmo faz o papel de entidade certificadora, gerando e assinando o certificado. O algoritmo de encriptao usado o mesmo, de forma que um certificado self -signed corretamente gerado oferece a mesma segurana que um certificado reconhecido. O grande problema que os navegadores nos clientes no sero capazes de verificar a autenticidade do certificado, de forma que os visitantes recebero um aviso de "certificado no reconhecido" ao acessarem a pgina:

O propsito de entidades certificadoras, como a Verisign, confirmar a titularidade dos certificados, confirmando que o certificado recebido ao acessar determinado site pertence realmente entidade que o est fornecendo. isso que garante que voc est mesmo acessando o home banking do banco em que tem conta e no o site de um script kiddie qualquer. Certificados assinados por entidades certificadoras so automaticamente aceitos pelos navegadores (j que sua identidade j foi confirmada pela entidade certificadora), o que evita a exibio da mensagem. Vamos ento comear com a configurao de um certificado self -signed, e em seguida entender o que muda ao utilizar um certificado reconhecido.

Usando um certificado self-signed

No Debian e derivados voc pode gerar um certificado caseiro utilizando o script "make-sslcert", instalado atravs do pacote "ssl-cert": # apt-get install ssl-cert Ao usar o script, voc deve especificar o arquivo com o template (/usr/share/sslcert/ssleay.cnf) e o arquivo onde o certificado ser salvo (/etc/apache2/ssl/apache.pem, para gerar um certificado padro para o servidor), como em: # mkdir /etc/apache2/ssl/ # cd /etc/apache2/ssl/ # make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem -days 1095 A opo "-days" especifica a validade do certificado, que no exemplo ser de 3 anos. O script solicitar as informaes sobre a organizao que sero includas no certificado, incluindo o cdigo de pas, estado, cidade e o nome da empresa. Estes so dados pblicos, que sero exibidos aos clientes como parte das propriedades do certificado. O mais importante vem no final, quando o script pergunta: Common Name (eg, your name or your server's hostname) []: Nesse ponto, voc deve sempre fornecer a URL completa do servidor onde o certificado ser usado, como em "www.gdhpress.com.br" ou "ssl.gdhn.com.br". Se voc especificar um domnio diferente, o cliente receber um aviso adicional ao se conectar, avisando do problema. Isso afastar visitantes, j que muitos pensaro tratar-se de uma fraude. Com o certificado gerado, abra agora o arquivo "/etc/apache2/ports.conf" e adicione a linha "Listen 443" (a porta usada pelo https), como em: Port 80 Listen 443 Com isso, o Apache 2 j est configurado. Falta apenas ativar o uso do SSL dentro da configurao do(s) virtual host(s) onde ele for ser utilizado. Para testar, vamos ativ-lo na pgina padro que usamos para testar o servidor. Abra o arquivo "/etc/apache2/sites-available/default ". No incio do arquivo, substitua a linha "NameVirtualHost *", por: NameVirtualHost *:443 NameVirtualHost *:80 Isso explica que o Apache deve escutar tanto a porta 80 padro, quanto a porta 443, usa da pelo SSL. Logo em seguida, substitua a linha "<VirtualHost *>", por: <VirtualHost *:80>

At aqui, dividimos a configurao em duas sees, uma para a porta 80, outra para a porta 443, usada pelo SSL. Falta agora adicionar a seo referente configurao do SSL no final do arquivo: <VirtualHost *:443> DocumentRoot /var/www/ ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem </VirtualHost> Reinicie o servidor (/etc/init.d/apache2 restart) e acesse o endereo "https://127.0.0.1" para testar a configurao. Ao conectar, o navegador exibe um aviso "O certificado do servidor falhou no teste de autenticidade" ou similar, o que normal ao usar um certificado caseiro. O CentOS no inclui o make-ssl-cert, mas inclui um outro script bastante prtico, disponvel dentro da pasta "/etc/pki/tls/certs": # cd /etc/pki/tls/certs Uma vez dentro da pasta, use o comando "make" seguido pelo nome do arquivo que ser gerado, como em: # make apache.pem Por default, a validade do certificado gerado pelo script ser de 365 dias. Para usar outro valor, edite o arquivo "make-dummy-cert" dentro da pasta, substituindo o "-days 365" na quinta linha de baixo para cima pelo valor desejado antes de gerar o certificado. Isso gerar o arquivo "/etc/pki/tls/certs/apache.pem", contendo o certificado. Para que ele seja usado, abra o arquivo "/etc/httpd/conf.d/ssl.conf" e localize a linha: #SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt Descomente-a e indique a localizao do arquivo gerado, como em: SSLCACertificateFile /etc/pki/tls/certs/apache.pem A partir da, voc pode reiniciar o servio httpd e testar a configurao acessando o endereo "https://servidor". Diferente do Debian, no necessrio adicionar a linha "Listen 443" na configurao do Apache, pois a linha faz parte do arquivo "/etc/httpd/conf.d/ssl.conf", que criado automaticamente ao instalar o pacote mod_ssl. Dentro do arquivo, voc encontra as linhas: # When we also provide SSL we have to listen to the # the HTTPS port in addition.

# Listen 443 Em outras distribuies, voc pode usar diretamente o openssl para gerar o certificado. Nesse caso, o comando maior, j que precisamos especificar manualmente um volume maior de parmetros. Scripts como o make-ssl-cert so desenvolvidos justamente para tornar a gerao do certificado mais simples. # openssl req -new -x509 -days 1095 -sha1 -newkey rsa:1024 -nodes \ -keyout server.key -out meuservidor.csr Este comando gera dois arquivos separados, o "server.key", que contm a chave criptogrfica e o "meuservidor.csr", que contm o certificado que ser fornecido aos clientes. Estes dois arquivos tem a mesma funo do arquivo ".pem" que gerado pelos scripts do Debian e do CentOS, apenas desmembrado em dois arquivos separados. Para us-los, voc precisa apenas adicionar duas linhas separadas dentro do arquivo de configurao principal do Apache ("/etc/apache2/httpd.conf" no caso do Debian ou "/etc/httpd/conf/httpd.conf", no caso do CentOS), especificando as localizaes dos dois arquivos: SSLCertificateFile /etc/apache2/ssl/meuservidor.csr SSLCertificateKeyFile /etc/apache2/ssl/server.key No esquea de ativar o mod_ssl e incluir a linha "Listen 443" na configurao do Apache, para que ele passe a escutar a porta do SSL. Certifique-se tambm de que a porta 443 est aberta na configurao do firewall.

Usando o SSL para pastas especficas

Em geral, voc vai desejar usar o SSL apenas para sees especficas do site, como no caso de pginas de cadastro e de vendas, por exemplo. Na maioria dos casos, o cliente navega livremente pelo site, usando o protocolo HTTP no en criptado e acessa uma rea protegida pelo SSL ao concretizar a compra ou ao acessar uma rea onde precisa fornecer dados pessoais. Isso acontece por um motivo muito simples: servir pginas em HTTPS caro em termos de processamento, de forma que encriptar o acesso a todo o site acabaria gerando um grande desperdcio de recursos. Voc tem ento duas opes. Usar um domnio separado para a rea protegida, como "ssl.minhaempresa.com", de forma que ela fique completamente separada do restante do site, ou proteger apenas uma pasta especfica do site, tornando mandatrio o uso do HTTPS ao acess-la. Para a primeira soluo, voc usaria uma configurao similar a essa dentro da configurao do Apache: <VirtualHost *:80> ServerName www.gdhn.com.br

DocumentRoot /var/www/gdhn </VirtualHost> <VirtualHost *:443> ServerName ssl.gdhn.com.br DocumentRoot /var/www/gdhn-ssl SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost> Veja que, nesse caso, temos essencialmente dois sites separados, um acessvel apenas via HTTP e outro apenas via HTTPS. Ao acessar o "http://www.gdhn.com.br" o visitante acessaria a pasta "/var/www/gdhn", que conteria o contedo geral do site, enquanto ao acessar o "https://ssl.gdhn.com.br" ele acessaria as pginas da seo segura, armazenadas na pasta "/var/www/gdhn-ssl". A interligao entre as duas partes seria ento feita atravs de links, que levariam o visitante de uma seo outra do site. A segunda opo, usar uma pasta para o SSL, um pouco mais elegante, mas demanda uma configurao um pouco mais cuidadosa. Imagine que a seo segura do site ser armazenada dentro da pasta "/var/www/gdhn/loja", que dever ser acessada apenas via HTTPS. Ao acessar o "https://www.gdhn.com.br" o visitante cair direto na pasta segura e, ao tentar acessar o "http://www.gdhn.com.br/loja" ele ser automaticamente redirecionado ao "https://www.gdhn.com.br". Nesse caso, voc utilizaria uma configurao similar a essa: <VirtualHost *:80> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn <Directory /var/www/gdhn/loja> SSLRequireSSL </Directory> Redirect /loja https://www.gdhn.com.br </VirtualHost> <VirtualHost *:443> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn/loja SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost>

Veja que agora, usamos o domnio "www.gdhn.com.br" nas duas sees da configurao, tanto para HTTP quanto para HTTPS, entretanto, a seo com a configurao do HTTPS aponta para a pasta "/var/www/gdhn/loja". Como a idia que os arquivos da pasta possam ser acessados apenas usando o SSL, adicionamos uma diretiva para a pasta (<Directory /var/www/gdhn/loja>), dizendo que ela s pode ser acessada via HTTPS (SSLRequireSSL). Para que os visitantes que tentarem acessar a pasta via HTTP sejam encaminhados para a rea protegida, usamos uma regra de encaminhamento (Redirect /loja https://www.gdhn.com.br). Esta regra utiliza o mdulo "rewrite", que precisa estar ativo na configurao do Apache. Caso necessrio, ative-o usando o comando "a2enmod rewrite". Finalmente, caso voc queira que todo o contedo do site fique disponvel via HTTPS e que os visitantes que tentarem acessar o http://www.gdhn.com.br/ sejam encaminhados para o https://www.gdhn.com.br, a configurao seria similar a essa: <VirtualHost *:80> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn <Directory /var/www/gdhn/> SSLRequireSSL </Directory> Redirect / https://www.gdhn.com.br </VirtualHost> <VirtualHost *:443> ServerName www.gdhn.com.br DocumentRoot /var/www/gdhn/ SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl_gdhn_com_br.crt SSLCertificateKeyFile /etc/apache2/ssl/gdhn_com_br.key SSLCertificateChainFile /etc/apache2/ssl/ssl_gdhn_com_br.ca-bundle </VirtualHost> Como pode ver, a configurao quase idntica do exemplo anterior. As nicas diferenas so que agora a seo com a configurao do HTTPS aponta para o diretrio raiz do site e a regra de redirecionamento encaminha todos os acessos feitos feitos via HTTP para o https://www.gdhn.com.br, fazendo com que o acesso a qualquer pgina do site seja feito via SSL.

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. Vamos estudar a configurao do DNS em detalhes no prximo captulo, dedicado unicamente ao assunto. Este foi apenas um exemplo rpido para que voc tenha uma idia geral sobre a configurao. Por enquanto, vamos nos concentrar na configurao do Apache propriamente dito. 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 (mais adiante veremos como configurar o servidor FTP com o Proftpd). Outra opo utilizar o SFTP, qu e permite acesso seguro. Veremos mais detalhes sobre ele no captulo sobre o SSH. 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. Concluindo, caso queira ativar o suporte a SSL para algum dos virtual hosts, adicione a sesso referente ao SSL dentro da configurao de cada site, indicando corretamente a pasta do site e os arquivos de log. O SSL pode ser tanto ativado para o raiz do site, permitindo que os visitantes visualizem qualquer parte do site usando o "https://", ou utilizar uma pasta separada, onde est a parte de comrcio eletrnico do site, por exemplo, como em: <VirtualHost *:443> ServerName www.joao.com.br DocumentRoot /var/www/joao/ssl SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem </VirtualHost> Neste caso, ao acessar o "http://www.joao.com.br", o visitante visualizar o contedo da pasta "/var/www/joao/html", enquanto ao acessar o "https://www.joao.com.br", visualizar a "/var/www/joao/ssl". Como vimos no tpico anterior, certificados SSL so vlidos apenas para u m domnio especfico. Se voc deseja oferecer suporte a SSL para vrios subdomnios hospedados no servidor, a melhor opo adquirir um certificado wildcard, que valido para qualquer subdomnio dentro do domnio principal da sua empresa. Isso permite qu e voc crie diversos virtual hosts, como "loja1.minhaempresa.com" e "loja2.minhaempresa.com", utilizando o mesmo certificado. Essa configurao manual funciona para pequenos servidores, que hospedam algumas dezenas ou centenas de pginas. Grandes servios de hospedagem geralmente acabam desenvolvendo algum tipo de sistema para automatizar a tarefa. Nos servios de hospedagem gratuita, por exemplo, onde o nmero de clientes assustadoramente grande, as alteraes so feitas de forma automtica quando o visitante faz seu cadastro, geralmente atravs de um sistema escrito em PHP ou Java.

Conforme o nmero de usurios cresce e o espao em disco no servidor comea a ficar escasso, voc comear a sentir falta de um sistema de quotas, que limite o espao que cada usurio pode usar. Para isso, consulte o tpico sobre quotas de disco, mais adiante.

Você também pode gostar