Você está na página 1de 24

Sumrio

Servio de Pginas Web (Apache2)........................................................................................2


Contedo............................................................................................................................2
Laboratrio 1 - Nvel bsico................................................................................................2
Laboratrio 2 - Nvel intermedirio....................................................................................2
Na prtica......................................................................................................................3
Laboratrio 3 Extenso do nvel intermedirio................................................................5
Referencial Terico - Introduo ao Apache...........................................................................6
Entendendo a organizao dos arquivos.......................................................................7
No Debian e derivados...................................................................................................7
Ativando e desativando sites no Apache...................................................................8
Ativando e desativando mdulos no Apache.............................................................9
Configuraes de Portas do Apache..........................................................................9
No CentOS, Fedora e RHEL..........................................................................................10
Adicionando e removendo sites...............................................................................10
Adicionando e removendo de mdulos...................................................................10
Ajustes finos do Apache...........................................................................................11
Virtual Hosts.................................................................................................................11
Instalando o suporte a PHP..........................................................................................15
Testando suporte ao PHP.........................................................................................16
Dicas de segurana do PHP.....................................................................................17
Ativando o SSL.............................................................................................................17
Usando um certificado self-signed...........................................................................18
Usando um certificado reconhecido........................................................................20
Usando o SSL para pastas especficas.....................................................................22
Referncias.......................................................................................................................24

Laboratrio de Servidor Web Apache2

Servio de Pginas Web (Apache2)


Contedo
Neste laboratrio sero apresentadas as seguintes competncias:
1.

Capacidade de instalao e configurao do servidor Web Apache;

2.

Publicao de vrios sites hospedados em um mesmo servidor Web;

Este laboratrio ser dividido em trs etapas, os nveis: bsico, intermedirio, e bem vindo a vida
real ( por sua conta).

Laboratrio 1 - Nvel bsico


Instalao e configurao de um site bsico. Para isso ser necessrio, em resumo:

Passo 1: Instalao de Apache2 (apt-get install apache2);


Passo 2: Iniciar o servio (service apache2 restart);
Passo 3: Verificar se o apache est funcionando corretamente, acessando o IP do servidor pelo
navegador web (Uma pgina dever ser apresentada informando que est tudo ok);
Passo 4: Criao do arquivo index.html para o seu site dentro do diretrio /var/www (substituindo o
index.html que j existe l). Recomendo renomear o index.html que j existia ao invs de apag-lo.
Passo 5: Acessar o site de um outro computador digitando o endereo IP do servidor. Dever aparecer o
site que foi preparado no index.html;

Com este simples resumo realizar facilmente a 1 etapa do laboratrio (LAB).


Se tudo deu certo no nvel bsico, podemos avanar, aumentando um pouco a complexidade do
laboratrio de servidor Web.

Laboratrio 2 - Nvel intermedirio


Instalao e configurao de vrios sites e acesso via endereos de domnios FQDNs. Para isso ser
necessrio, em resumo:
Passo 1: Ter realizado o Nvel bsico com sucesso;
Passo 2: Instalao e configurao de do servio de DNS (verifique os laboratrios de DNS);
Passo 3: Criao de uma zona no DNS (/etc/bind/named.conf.local) para responder pelo domnio
(site), este nome encaminhar para o endereo IP do servido que hospeda o site;
Passo 4: Criar um diretrio exclusivo para o site que se deseja hospedar;
Passo 5: Criar um arquivo index.html para o site no seu respectivo diretrio criado no item anterior,
com o texto Laboratrio de servio de pginas Web intermedirio;
Passo 6: Criar um arquivo com a configurao do Virtual Host no diretrio /etc/apache2/sitesavailable;
Passo 7: Habilitar acesso ao site configurado no /etc/apache2/sites-available para que o apache possa
disponibilizar para os usurios com o comando a2ensite <nome do arquivo no sites-available>;

Laboratrio de Servidor Web Apache2

Passo 8: Recarregar o apache a cada nova publicao (service apache2 reload);


Passo 9: Testar o acesso ao site utilizando a url do site preparada para ser recebida pelo servio de DNS
e reencaminha-la para o servido do Apache.
Se tudo deu certo como resultado ser apresentada a pgina do site com o texto: Laboratrio de
servio de pginas Web intermedirio. Caso isso no acontea refaa/revise todo o processo at
encontrar o erro.

Na prtica...
Vamos realizar a atividade na prtica. Neste LAB vamos adotar que:

O endereo do site: www.fuctura.net:

O IP do servidor: 172.16.0.1

Vamos aos passos (comeando do passo 3):

Passo 3: Criao de uma zona no DNS (/etc/bind/named.conf.local) para responder pelo domnio
(site), este nome encaminhar para o endereo IP do servidor que hospeda o site;
Crie uma zona adicional no arquivo de zonas do DNS. Recomendamos que crie as zonas no arquivo
/etc/bind/named.conf.local. Veja a definio da zona a seguir:

------------------------------ Arquivo: /etc/bind/named.conf.local -----------------------------zonefuctura.netIN{


typemaster;
file/etc/bind/db.fuctura.net;
};
-------------------------------------------------------------------------------------------------Crie o arquivo da base de dado da zona, conforme definido na configurao acima. A seguir um exemplo
do arquivo de base de zona:
Arquivo: /etc/bind/db.fuctura.net
----------------------------------------------------------;
;BINDdatafileforlocalloopbackinterface
;
$TTL604800
@INSOAfuctura.net.root.fuctura.net.(
2;Serial
604800;Refresh
86400;Retry
2419200;Expire
604800);NegativeCacheTTL
;
@INNSfuctura.net.
@INA172.16.0.1
wwwINA172.16.0.1
-------------------------------------------------------------------------------------------------Lembre-se de Reiniciar o servio de DNS para que este reconhea o novo domnio.

#servicebind9restart
Neste exato momento voc poder testar no navegador web (ou no terminal com: ping, nslookup, dig...)
se o DNS realmente esta resolvendo o nome www.fuctura.net convertendo para o 172.16.0.1. Como
resultado teremos que ver a pgina que foi vista no parte anterior deste LAB (nvel bsico). Caso isso no
acontea refaa/revise todo o processo at encontrar o erro.

Laboratrio de Servidor Web Apache2

OBSERVAES:

Muitos erros na configurao de DNS so referentes a erros de digitao, se puder sempre copiar
e colar, evita muitos problemas;

Sempre que reiniciar o servio, mesmo que o servio esteja [ok], verifique o log (tail
/var/log/syslog) pois podem existir notificaes importante para a identificao de problemas;

Note que no ser necessrio criar mais de uma zona reversa, visto que a zona reversa
responder para qualquer outro domnio;

Se voc precisar hospedar mais de uma domnio, por exemplo www.empresa.net, basta criar mais
uma zona que responder por este novo domnio;

Passo 4: Criar um diretrio exclusivo para o site que se deseja hospedar;


Por precauo e segurana recomenda-se hospedar os sites no diretrio /var/www onde o servio do
apache2 tem permisses que so restritas aos demais diretrios do sistema.
Para que mantenha uma organizao, para cada site crie um diretrio. No necessrio que o diretrio
tenha o mesmo nome do site, mas crie um padro para facilitar a organizao.
Neste LAB criaremos o seguinte diretrio (note que o diretrio apenas fuctura):

#mkdir/var/www/fuctura
Passo 5: Criar um arquivo index.html para o site no seu respectivo diretrio criado no item anterior,
com o texto Laboratrio de servio de pginas Web intermedirio;
Acesse o diretrio (/var/www/fuctura.com)e crie um arquivo index.html;

#cd/var/www/fuctura
#touchindex.html
#viindex.html
Escreva o seguinte texto:

------------------------------ Arquivo: /var/www/fuctura/index.html -----------------------------<html>


<body>
<h1>Siteexemplowww.fuctura.net</h1>
</body>
</html>
-------------------------------------------------------------------------------------------------Lembre-se de salvar o arquivo (:wq)

Passo 6: Criar um arquivo com a configurao do Virtual Host no diretrio /etc/apache2/sitesavailable;


Faa os seguintes testes:

Tente acessar o site com a seguinte caminho: http://172.16.0.1 (o resultado ser o mesmo do
inicio do LAB);

Tente acessar o site com a seguinte caminho: http://172.16.0.1/fuctura (o resultado Apresentar o


novo site criado). Neste caso acessamos um diretrio especificado no servidor web;

Agora para finalizar Tente acessar o site com a seguinte caminho: http://www.fuctura.net (o
resultado ser o mesmo do inicio do LAB). Precisamos configura o servidor web para entender que
dever redirecionar para as pastas diferentes dependendo das requisies;

Para que o apache possa reconhecer o site solicitado e apresentar as paginas corretas precisamos criar
uma configurao de Virtual Host.
Crie um arquivo chamado fuctura em /etc/apache2/sites-available e escreva a configurao bsica de
virtual host;

#touch/etc/apache2/sitesavailable/fuctura;
#vi/etc/apache2/sitesavailable/fuctura;

Laboratrio de Servidor Web Apache2

------------------------------

Arquivo: /etc/apache/sitesavailable/fuctura

------------------------------

<VirtualHost*:80>
ServerAdminemail@fuctura.net
ServerNamewww.fuctura.net
ServerAliasfuctura.netwww.fuctura.net
DocumentRoot/var/www/fuctura
</VirtualHost>
-------------------------------------------------------------------------------------------------Lembre-se de salvar o arquivo (:wq)
OBSERVAES:
Note que o campo ServerAlias define como o site esperado pelo encaminhamento do DNS. Caso o
usurio digite vendas.fuctura.net, mesmo que o DNS tenha uma entrada vendas mapeada para o IP
do servidor WEB, o apache no encaminhar para o diretrio do site correto.
Passo 7: Habilitar acesso ao site configurado no /etc/apache2/sites-available para que o apache possa
disponibilizar para os usurios com o comando a2ensite <nome do arquivo no sites-available>;
Concludo o passo 6, o site esta pronto para ser acessado, mas no esta habilitado para visualizao. Para
habilit-lo em distribuies baseada em Debian utilize:
Para habilitar

#a2ensite<nomedoarquivonositesavailable>
Para desativar:

#a2dissite<nomedoarquivonositesavailable>
Passo 8: Recarregar o apache a cada nova publicao (# service apache2 reload);
Todas as vezes que fizer modificaes nos arquivos de Virtual Hosts do Apache voc precisa solicita que o
servio que est em execuo reconhea as novas configuraes. O apache possui uma opo que no
para o servio (restart) apenas recarrega (reload):

#serviceapache2reload
Passo 9: Testar o acesso ao site utilizando a url do site preparada para ser recebida pelo servio de DNS
e reencaminha-la para o servido do Apache.
Se todas as configuraes estiverem certas, como resultado ser apresentada a pgina do site com o
texto: Laboratrio de servio de pginas Web intermedirio. Caso isso no acontea refaa/revise
todo o processo at encontrar o erro.

Laboratrio 3 Extenso do nvel intermedirio


1.

2.

3.

Faa com que o mesmo site seja acessado por outros subdomnios como:

www.fuctura.net

vendas.fuctura.net

correio.fuctura.net

Faa com que o mesmo site seja acessado por outros domnios como:

www.cursolinux.net

email.linuxserver.net

Crie um segundo site www.redesmistas.net e faa com que este domnio apresente uma
pagina com o texto: bem vindo ao site www.redesmistas.net

Laboratrio de Servidor Web Apache2

Referencial Terico - Introduo ao 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 [1].
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:

#aptgetinstallapache2apache2utils
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:

#aptgetinstallsslcert
Se voc estiver utilizando o CentOS ou o Fedora, instale o pacote "httpd", que contm o Apache 2 e os
utilitrios:

#yuminstallhttpd
Diferente do Debian, no CentOSS 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:

#servicehttpdstart
#chkconfighttpdon
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 a seguir.

Laboratrio de Servidor Web Apache2

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 se 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:

Figura1:ComunicaodoApachecomosmdulos

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:

Laboratrio de Servidor Web Apache2

Figura2:OrganizaodosArquivosnoDebianederivados

Todos os arquivos de configurao esto organizados dentro do diretrio "/etc/apache2". Dentro dele,
temos as pastas:

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",
funcionamento do servidor;

A pasta "conf.d", que armazena arquivos com configuraes adicionais.

que

armazena

configuraes

diversas

relacionadas

ao

Ativando e desativando sites no Apache


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:
Ativao:

#a2ensitegdhn
Desativao:

#a2dissitegdhn

Laboratrio de Servidor Web Apache2

Ativando e desativando mdulos no Apache


Continuando, a mesma idia das duas pastas separadas se aplica aos mdulos. A pasta "modsavailable" contm a configurao e scripts de inicializao para todos os mdulos disponveis, mas
apenas os mdulos referenciados (atravs de um link) na pasta "mods-enabled" so realmente
carregados.
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:
Ativao:

#a2enmodphp5
Desativao:

#a2dismodphp5
Para ativar ou desativar sites, ou ao fazer alteraes simples na configurao, voc n o precisa
reiniciar todo o servio apenas recarregar as configuraes, isso poupa paradas nos acessos j
existentes aos sites publicados:

#/etc/init.d/apache2reload
Para casos de ativao e desativao de mdulos para que a alterao entre em vigor, necessrio
reiniciar o servio:

#/etc/init.d/apache2forcereload
Ou

#/etc/init.d/apache2restart
OBSERVAO:

Uma vez que um determinado mdulo ativado, ele fica automaticamente disponvel para todos
os sites hospedados no servidor.

Usurio dos servio apache no Debian: www-data

Configuraes de Portas do Apache


Configurao de portas realizada no arquivo "ports.conf". Originalmente o arquivo vem com uma nica
linha. Neste arquivo podero ser adicionas novas portas, como faremos mais adiante ao ativar o SSL:

Listen80
O Apache tambm permite 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).
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:

Listen80
Listen443
Listen8080

Laboratrio de Servidor Web Apache2

No CentOS, Fedora e RHEL


As distribuies derivadas do Red Hat, incluindo o CentOS, o Fedora e o RHEL, utilizam por padro uma
organizao
mais
tradicional,
onde
toda
a
configurao

concentrada
no
arquivo
"/etc/httpd/conf/httpd.conf", em vez de ser desmembrada em diversos arquivos separados. Isso pode
tornar a configurao mais simples ou mais complicada, dependendo do seu ponto de vista, j que por
um lado temos um nico arquivo, mas por outro ele muito maior.

Adicionando e removendo sites


No de distribuies baseadas em RedHat, ao adicionar um novo site na configurao, voc simplesmente
adiciona a seo referente a ele dentro do arquivo httpd.conf (em vez de criar um arquivo separado,
como no Debian) e, para desativ-lo posteriormente, comenta ou remove a configurao.

Adicionando e removendo de mdulos


Os mdulos so ativados atravs de arquivos criados dentro da pasta "/etc/httpd/conf.d/". Todos os
arquivos com extenso ".conf" colocados dentro da pasta so carregados pelo servidor, de forma similar
aos links dentro da pasta "/etc/apache2/mods-enabled" do Debian.
Ao ativar o suporte a PHP, por exemplo, criado o arquivo "/etc/httpd/conf.d/php.conf". No existe um
script destinado a ativar e desativar os mdulos, como no caso do a2enmod/a2dismod do Debian; para
desativar um mdulo, voc precisa apenas remover ou renomear o arquivo referente a ele dentro da
pasta, alterando a extenso de ".conf" para ".disabled", por exemplo.
Para desativar o suporte a PHP, por exemplo, voc renomearia o arquivo "php.conf", e em seguida
reiniciaria o Apache, como em:

#cd/etc/httpd/conf.d/
#mvphp.confphp.disabled
#servicehttpdrestart
Outra diferena que, como vimos anteriormente, o script responsvel por ativar e desativar o servio se
chama "httpd" em vez de "apache2", como no caso do Debian.
Para reiniciar o servio ou apenas recarregar as configuraes voc pode usar os parmetros restart e
"reload", da mesma forma que no Debian:

#servicehttpdrestart
#servicehttpdreload
OBSERVAO:

O Nome do usurio do Apache no CentOS/Fedora "apache".

De uma forma geral, o servidor web precisa apenas de permisso de leitura para os arquivos do site,
salvo em casos especiais, onde so usados scripts CGI ou pginas em PHP que salvam informaes em
arquivos de texto em vez de utilizarem um banco de dados.

Quando o Apache instalado, criado por padro o arquivo "/etc/apache2/sites-available/default",


que contm a configurao de um site "raiz", que usa (por padro) a pasta "/var/www" como diretrio de
pginas. Caso queira hospedar vrios sites no mesmo servidor, necessrio criar uma pasta e um
arquivo de configurao para cada site adicional.
Um exemplo prtico:

Seu servidor pode, por exemplo, hospedar o "joao.com.br" e o "maria.com.br".

O servidor DNS, mantido no servidor, 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"

Laboratrio de Servidor Web Apache2

10

"/etc/apache2/sites-available/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.

Ajustes finos do Apache


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.

Virtual Hosts
O suporte a virtual hosts [2] 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.
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;

Tenham acesso a uma ou mais bases de dados do servidor MySQL, o que permite a instalao de
gestores de contedo como o WordPress;

Os clientes no podem instalar novos pacotes nem alterar a configurao do servidor;

1 Passo: Configurao do Servidor de DNS. 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.
Em resumo, voc precisaria:
1.

instalar o bind no servidor (caso j o tenha instalado passe para o prximo item);

2.

Editar a configurao, adicionando uma nova configurao de zona para cada domnio
hospedado. Isso feito em duas etapas:
1.

Na primeira, voc edita o arquivo named.conf, adicionando uma entrada com esta,
especificando o domnio e o arquivo com a configurao:

Laboratrio de Servidor Web Apache2

11

zone"joao.com.br"IN{
typemaster;
file"/etc/bind/db.joao";
allowtransfer{64.234.23.13;};
};
2.

Dentro do arquivo "/etc/bind/db.joao", especificado no arquivo de configurao anterior,


iria uma configurao da zona similar ao exemplo a seguir, 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.(
20080616453H15M1W1D)
NS
servidor.joao.com.br.
NS
ns2.joao.com.br.
IN
MX
10
servidor.joao.com.br.
joao.com.br.
IN
A
64.234.23.12
www
IN
A
64.234.23.12
ns1
IN
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.

2 Passo: Criao de pastas separadas para cada site. 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
3 Passo: 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:

Exemplo /etc/apache2/sites-available/joao:

<VirtualHost*:80>
ServerAdminjoao@joao.com.br
ServerNamewww.joao.com.br
ServerAliasjoao.com.brwww.joao.com.br
DocumentRoot/var/www/joao
</VirtualHost>
Exemplo2 /etc/apache2/sites-available/maria:

<VirtualHost*:80>
ServerAdminmaria@gmail.com
ServerNamewww.maria.com.br
ServerAliasmaria.com.brwww.maria.com.br
DocumentRoot/var/www/maria
</VirtualHost>

Laboratrio de Servidor Web Apache2

12

Note que foi adicionada 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>
ServerAdminhostmaster@gdhn.com.br
ServerNamemaria.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":

#a2ensitejoao
#a2ensitemaria
4 Passo: Edio do arquivo /etc/apache2/sites-available/default. 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>".

5 Passo: Recarregar as definies do Apache. 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/apache2reload
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, que 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.

Nas distribuies CentOS/Fedora e derivados


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

Laboratrio de Servidor Web Apache2

13

A partir da, voc pode adicionar cada um dos sites hospedados no servidor usando a mesma
configurao que vimos anteriormente, como em:

<VirtualHost*:80>
ServerNamewww.joao.com.br
ServerAliasjoao.com.brwww.joao.com.br
DocumentRoot/var/www/joao
</VirtualHost>
<VirtualHost*:80>
ServerNamewww.maria.com.br
ServerAliasmaria.com.brwww.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:

#servicehttpdreload
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>
ServerAdminjoao@joao.com.br
ServerNamewww.joao.com.br
ServerAliasjoao.com.brwww.joao.com.br
DocumentRoot/var/www/joao/html
ErrorLog/var/www/joao/logs/error.log
CustomLog/var/www/joao/logs/access.logcombined
</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>
ServerAdminjoao@joao.com.br
ServerNamewww.joao.com.br
ServerAliasjoao.com.brwww.joao.com.br
DocumentRoot/var/www/joao/html
ErrorLog/var/log/apache2/joao.error.log
CustomLog/var/log/apache2/joao.access.logcombined
</VirtualHost>
Note que, como todos os sites ficam hospedados no mesmo servidor, a nica forma de chegar ao site

Laboratrio de Servidor Web Apache2

14

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>
ServerNamewww.joao.com.br
DocumentRoot/var/www/joao/ssl
SSLEngineon
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 um 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 que 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.

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.
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:

#aptgetinstallphp5
No caso do CentOS e do Fedora, usado um pacote unificado, o "php", que inclui a verso mais recente
do interpretador, eliminando a confuso:

#yuminstallphp
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):

#aptgetinstalllibapache2modphp5
Laboratrio de Servidor Web Apache2

15

No Debian o mdulo "libapache2-mod-php5" Ativado com ocomando a2enmod:

#a2enmodphp5
No esquea de reiniciar o servio para que o mdulo seja carregado e a configurao entre em vigor:

#/etc/init.d/apache2forcereload
ou:

#serviceapache2restart
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:

LoadModulephp5_modulemodules/libphp5.so
AddHandlerphp5script.php
AddTypetext/html.php
DirectoryIndexindex.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.
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:

#aptgetinstallphp5mysql
No caso do PostgreSQL, utilizado o mdulo "php5-pgsql", que tem a mesma funo:

#aptgetinstallphp5pgsql
No se esquea de reiniciar o Apache, para que as alteraes entrem em vigor:

#/etc/init.d/apacheforcereload
No caso do Fedora e do CentOS, muda apenas o nome do pacote, que passa a se chamar simplesmente
"php-mysql":

#yuminstallphpmysql

Testando suporte ao PHP


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:

<?phpphpinfo();?>
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:

Laboratrio de Servidor Web Apache2

16

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

Dicas de segurana do PHP


O interpretador php configurado atravs do arquivo "php.ini", um longo arquivo de configurao que
permite ativar ou desativar opes diversas da linguagem como, por exemplo, a possibilidade de fazer
upload de arquivos atravs de scripts colocados nas pginas.
A localizao do arquivo pode variar de acordo com a distribuio, mas voc pode encontr-lo
rapidamente usando o comando "locate". No caso do CentOS, o arquivo o "/etc/php.ini", enquanto nas
distribuies derivadas do Debian usado o arquivo "/etc/php5/apache2/php.ini".
Para melhorar a segurana, recomendvel desativar as funes "show_source", "system", "shell_exec",
"passthru", "exec", "popen", "proc_open", "symlink". Este procedimento pode ser feito atravs da opo
"disable_functions =", arquivo. Basta adicionar a lista das funes, consistem em preencher as funes a
serem desativadas como em:

disable_functions=show_source,system,shell_exec,passthru,exec,popen,
proc_open,symlink
Outras opes que recomendvel manter desativadas dentro do arquivo so:

expose_php = Off

register_globals = Off

allow_url_fopen = Off

allow_url_include = Off

A opo "allow_url_fopen" permite abrir ou processar uma pgina ou arquivo externo dentro do script
php. Embora ela seja uma funo til, usada por scripts que geram uma lista de links a partir de um feed,
por exemplo, ela pode ser usada para diversos tipos de abusos, o que faz com que seja desativada em
diversos servios de hospedagem.
Ao tentar executar algum script em PHP que dependa da funo desativada, voc receber um erro
similar a:
Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server
configuration in /var/ww/site/rss.php on line 59
Nesse caso, voc tem duas opes. Ou volta a ativar a opo dentro do arquivo, substituindo a linha
"allow_url_fopen = Off" por "allow_url_fopen = On" ( necessrio reiniciar o servio do Apache para que a
alterao entre em vigor) ou reescreve o script usando a funo "cURL", para que o script baixe o arquivo
antes de process-lo.

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:

#a2enmodssl
#/etc/init.d/apache2forcereload
Laboratrio de Servidor Web Apache2

17

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 "/etc/httpd/conf.d" automaticamente,
concluindo a instalao. No se esquea de reiniciar o servio para que a alterao entre em vigor:

#yuminstallmod_ssl
#servicehttpdrestart
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.

Usando um certificado self-signed


No Debian e derivados voc pode gerar um certificado caseiro utilizando o script "make-ssl-cert",
instalado atravs do pacote "ssl-cert":

#aptgetinstallsslcert
Ao usar o script, voc deve especificar o arquivo com o template (/usr/share/ssl-cert/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/
#makesslcert/usr/share/sslcert/ssleay.cnfapache.pemdays1095
Entendendo o make-ssl-cert:

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:

Laboratrio de Servidor Web Apache2

18

Port80
Listen443
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.
No Debian e derivados:
1 Passo: 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, usada pelo SSL.

2 Passo: 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.
3 Passo: Agora adicionar uma nova seo referente configurao do SSL no final do arquivo. Copie a
seo <VirtualHost *:80> e edite para que fique semelhante ao exemplo abaixo:

<VirtualHost*:443>
DocumentRoot/var/www/
ErrorLog/var/log/apache2/error.log
CustomLog/var/log/apache2/access.logcombined
SSLEngineon
SSLCertificateFile/etc/apache2/ssl/apache.pem
</VirtualHost>
3 Passo: 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.

No CentOS/Fedora

O CentOS no inclui o make-ssl-cert, mas inclui um outro script bastante prtico, disponvel dentro da
pasta "/etc/pki/tls/certs":
1 Passo: Acesse o diretrio /etc/pki/tls/certs;

#cd/etc/pki/tls/certs
2 Passo: Uma vez dentro da pasta, use o comando "make" seguido pelo nome do arquivo que ser
gerado, como em:

#makeapache.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.
Como reultado o arquivo "/etc/pki/tls/certs/apache.pem" gerado contendo o certificado.
3 Passo: Para que o certificado gerado no item anterior seja
"/etc/httpd/conf.d/ssl.conf" e localize a linha abaixo e descomente-a:

utilizado,

abra

arquivo

#SSLCACertificateFile/etc/pki/tls/certs/cabundle.crt

Laboratrio de Servidor Web Apache2

19

4 Passo: indique a localizao do arquivo de certificado gerado, como em::

SSLCACertificateFile/etc/pki/tls/certs/apache.pem
5 Passo: Reiniciar o servio httpd e testar a configurao acessando o endereo "https://servidor".

OBSERVAES:

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.

Outras ditribuies
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.

#opensslreqnewx509days1095sha1newkeyrsa:1024nodes\
keyoutserver.keyoutmeuservidor.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
OBSERVAES:

Lembre-se de ativar o mod_ssl;

Lembre-se de incluir a linha "Listen 443" na configurao do Apache, para que o servio passe a
escutar a porta do SSL;

Certifique-se tambm de que a porta 443 est aberta na configurao do firewall.

Usando um certificado reconhecido


Finalmente, temos a configurao para um certificado reconhecido, que ser assinado por uma entidade
certificadora, que voc utilizaria em um site de comrcio eletrnico aberto ao pblico.
Uma das entidades certificadoras mais tradicionais a Verisign (http://www.verisign.com/), que oferece
uma srie de garantias sobre os certificados emitidos. O grande problema com relao Verisign o
preo: o certificado de validao mais simples custa nada menos de US$ 499 anuais, com opes de at
US$ 1499. Com preos to altos, no de se estranhar que existam inmeras outras entidades
certificadoras, que oferecem preos mais competitivos.
Em termos de segurana, no existe muita diferena entre um certificado emitido pela Godaddy ou pela
Verisign, as principais diferenas so o nvel de validao e as garantias oferecidas por cada uma em caso
de fraude ou de quebra da chave criptogrfica. Assim como em outras reas, o principal fator na deciso
acaba sendo a questo da confiana.
Ao contratar os servios de uma entidade certificadora, sua parte no trabalho a de gerar uma chave de
encriptao e uma requisio de certificado,
1 passo: Gerar a chave de encriptao que novamente feito usando o openssl:

#opensslreqnewnodeskeyoutgdhn.keyoutgdhn.csr

Laboratrio de Servidor Web Apache2

20

O "gdhn.key" e o "gdhn.csr" indicam os arquivos com a chave e com a requisio do certificado que sero
gerados. Voc precisar responder as mesmas perguntas sobre o pas, estado, cidade, nome da empresa,
etc., que precisam ser respondidas corretamente, j que as informaes sero examinadas no apenas
pela entidade certificadora, mas tambm pelos clientes:
Country Name (2 letter code) [AU]: BR
State or Province Name (full name) [Some-State]: Estado
Locality Name (eg, city) []: Cidade
Organization Name (eg, company) []: Minha Empresa LTDA
Organizational Unit Name (eg, section) []: Vendas
Common Name (eg, YOUR name) []: ssl.minhaempresa.com.br

Como comentado anteriormente, o campo "Common Name" deve ser preenchido com o domnio onde o
certificado ser usado (incluindo o "www" ou o subdomnio usado), caso contrrio os clientes recebero
um aviso ao acessarem o site:

Figura3:errodecertificado

Em geral, as entidades certificadoras oferecem a opo de obter um certificado curinga (wildcard), que
cobre automaticamente todos os subdomnios usados no site. Entretanto, como eles abrem a
possibilidade de usar vrios subdomnios usando um nico certificado, as certificadoras cobram bem mais
caro por eles
2 passo: No final do processo, o openssl oferece a opo de especificar uma senha (challenge
password) para o certificado. importante deix-la em branco, caso contrrio voc precisar fornec-la
cada vez que o servidor web for iniciado, incluindo casos de reboots acidentais. O arquivo do certificado
armazenado em uma pasta protegida do servidor, fora do diretrio disponvel para a web, de forma que
se um atacante chega ao ponto de obter acesso a ele, significa que o problema mais embaixo e ele
muito provavelmente j obteve acesso completo ao servidor de qualquer forma.
3 passo: Envio dos arquivos para a certificao. Depois de gerar a requisio, o prximo passo
enviar o arquivo .csr para a entidade certificadora, que o usar para gerar o certificado. O arquivo .csr
na verdade um arquivo de texto plano, cujo contedo pode ser copiado e colado em um formulrio web.
Depois de confirmada sua identidade e feito o pagamento, voc receber de volta o certificado assinado,
que pode ser ento usado na configurao do Apache.
4 passo: Configurao do site com os arquivo devidamente assinados A configurao consiste
em adicionar as linhas "SSLCertificateFile" e "SSLCertificateKeyFile", indicando a localizao dos arquivos
.crt e .key recebidos. Em muitos casos, voc receber tambm um terceiro arquivo, com extenso "cabundle" ou similar, que usado em conjunto com uma terceira opo, a "SSLCertificateChainFile". Este
terceiro arquivo contm uma combinao de certificados, que permitem aos clientes chegarem at o
certificado raiz da entidade certificadora, de forma a comprovarem a autenticidade do seu certificado.
Devido a isso, ele tambm chamado de certificado intermedirio (Intermediate Certificate). Temos aqui
um exemplo de configurao com as trs opes:

Laboratrio de Servidor Web Apache2

21

<VirtualHost*:443>
DocumentRoot/var/www/gdhn
SSLEngineon
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.cabundle
</VirtualHost>
O processo de emisso do certificado inclui uma verificao de identidade, que justamente um dos
principais papis da entidade certificadora, j que se qualquer um pudesse gerar certificados vlidos no
nome de qualquer outro, o sistema perderia completamente o sentido. Nos planos mais simples, como no
certificado gratuito oferecido pela Comodo, feita uma simples verificao de titularidade via e-mail,
onde voc deve confirmar um cdigo enviado para uma conta administrativa, como
"admin@meudominio" ou "hostmaster@meudominio". Nos planos mais caros (onde a entidade
certificadora realmente oferece garantias, inclusive financeiras sobre o certificado emitido), o processo
mais burocrtico, incluindo o envio de documentos.

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 encriptado 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>
ServerNamewww.gdhn.com.br
DocumentRoot/var/www/gdhn
</VirtualHost>
<VirtualHost*:443>
ServerNamessl.gdhn.com.br
DocumentRoot/var/www/gdhnssl
SSLEngineon
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.cabundle
</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:

Laboratrio de Servidor Web Apache2

22

<VirtualHost*:80>
ServerNamewww.gdhn.com.br
DocumentRoot/var/www/gdhn
<Directory/var/www/gdhn/loja>
SSLRequireSSL
</Directory>
Redirect/lojahttps://www.gdhn.com.br
</VirtualHost>
<VirtualHost*:443>
ServerNamewww.gdhn.com.br
DocumentRoot/var/www/gdhn/loja
SSLEngineon
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.cabundle
</VirtualHost>
Entendendo a segunda alternativa:

Note 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 e reinicie o apache".

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>
ServerNamewww.gdhn.com.br
DocumentRoot/var/www/gdhn
<Directory/var/www/gdhn/>
SSLRequireSSL
</Directory>
Redirect/https://www.gdhn.com.br
</VirtualHost>
<VirtualHost*:443>
ServerNamewww.gdhn.com.br
DocumentRoot/var/www/gdhn/
SSLEngineon
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.cabundle
</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.

Laboratrio de Servidor Web Apache2

23

Referncias
[1] Sevidores Linux, captulo 6. Configurando Servidores Web. Documentao online. Disponvel em:
http://www.hardware.com.br/livros/servidores-linux/capitulo-configurando-servidores-web.html.
Acesso
em: 20 dezembro de 2012
[2] Configurando servidores DNS, no muque, parte 1. DNS e Virtual Hosting. Tutorial online. Disponvel
em: http://www.hardware.com.br/tutoriais/servidores-dns/pagina3.html. Acesso em: 20 dezembro de 2012

Laboratrio de Servidor Web Apache2

24