30
Configurando um servidor LAMP (Linux + Apache + MySQL + PHP) Introdução Os servidores web são a espinha dorsal da Internet, são eles que hospedam todas as páginas, incluindo os mecanismos de busca e servem como base para todo tipo de aplicativo via web, incluindo os webmails. No futuro, esta tendência deve se acentuar, com páginas web dinâmicas e aplicativos via web substituindo cada vez mais os aplicativos desktop. Nos primórdios da internet, eram utilizadas apenas páginas html estáticas e scripts CGI. O Apache em si continua oferecendo suporte apenas a esses recursos básicos, mas ele pode ser expandido através de módulos, passando a suportar scripts em PHP, acessar bancos de dados MySQL, entre inúmeros outros recursos. Sempre que é solicitada uma página em PHP ou outra linguagem, entra em ação o módulo apropriado, que faz o processamento necessário e devolve ao Apache a página html que será exibida. Entram em ação, então, os gestores de conteúdo e fóruns, que combinam os recursos do PHP com um banco de dados como o MySQL, acessado através dele. A combinação de tudo isso forma a solução que é popularmente chamada de "LAMP" (Linux + Apache + MySQL + PHP). O Apache e o MySQL, juntamente com o suporte a PHP podem ser também instalados sobre o Windows (formando o "WAMP"), uma solução relativamente popular entre administradores Microsoft que não se sentem à vontade em usar o IIS. Segundo a Netcraft, pouco mais de 50% dos servidores web do mundo rodam o Apache (http://news.netcraft.com/archives/web_server_survey.html ), a maior parte deles sobre o Linux. O percentual real é na verdade um pouco maior, pois um grande número de administradores configuram seus servidores para divulgarem informações falsas sobre o servidor web usado, de forma a não fornecer qualquer informação que possa facilitar ataques. Estes servidores não-identificados aparecem na pesquisa como "other". Além de ser um dos servidores web mais antigos e um dos mais seguros, o Apache possui inúmeros módulos, que adicionam suporte aos mais exóticos recursos. A maioria das páginas atuais utiliza uma estrutura em PHP, freqüentemente com um banco de dados MySQL ou PostgreSQL. Existem, inclusive, muitos sistemas prontos, como o phpBB (fórum) e o WordPress (para gerenciamento de conteúdo),

Servidor LAMP

Embed Size (px)

DESCRIPTION

Configurando um servidor LAMP(Linux + Apache + MySQL + PHP)

Citation preview

Page 1: Servidor LAMP

Configurando um servidor LAMP

(Linux + Apache + MySQL + PHP)

Introdução

Os servidores web são a espinha dorsal da Internet, são eles que hospedam todas

as páginas, incluindo os mecanismos de busca e servem como base para todo tipo

de aplicativo via web, incluindo os webmails. No futuro, esta tendência deve se

acentuar, com páginas web dinâmicas e aplicativos via web substituindo cada vez

mais os aplicativos desktop.

Nos primórdios da internet, eram utilizadas apenas páginas html estáticas e scripts

CGI. O Apache em si continua oferecendo suporte apenas a esses recursos básicos,

mas ele pode ser expandido através de módulos, passando a suportar scripts em

PHP, acessar bancos de dados MySQL, entre inúmeros outros recursos. Sempre que

é solicitada uma página em PHP ou outra linguagem, entra em ação o módulo

apropriado, que faz o processamento necessário e devolve ao Apache a página html

que será exibida. Entram em ação, então, os gestores de conteúdo e fóruns, que

combinam os recursos do PHP com um banco de dados como o MySQL, acessado

através dele. A combinação de tudo isso forma a solução que é popularmente

chamada de "LAMP" (Linux + Apache + MySQL + PHP).

O Apache e o MySQL, juntamente com o suporte a PHP podem ser também

instalados sobre o Windows (formando o "WAMP"), uma solução relativamente

popular entre administradores Microsoft que não se sentem à vontade em usar o

IIS.

Segundo a Netcraft, pouco mais de 50% dos servidores web do mundo rodam o

Apache (http://news.netcraft.com/archives/web_server_survey.html), a maior

parte deles sobre o Linux. O percentual real é na verdade um pouco maior, pois um

grande número de administradores configuram seus servidores para divulgarem

informações falsas sobre o servidor web usado, de forma a não fornecer qualquer

informação que possa facilitar ataques. Estes servidores não-identificados

aparecem na pesquisa como "other".

Além de ser um dos servidores web mais antigos e um dos mais seguros, o Apache

possui inúmeros módulos, que adicionam suporte aos mais exóticos recursos. A

maioria das páginas atuais utiliza uma estrutura em PHP, freqüentemente com um

banco de dados MySQL ou PostgreSQL. Existem, inclusive, muitos sistemas

prontos, como o phpBB (fórum) e o WordPress (para gerenciamento de conteúdo),

Page 2: Servidor LAMP

que podem ser instalados sem muita dificuldade depois que o servidor web já

estiver rodando.

Além do servidor web em si, você quase sempre vai precisar configurar também um

servidorDNS, que responderá pelo domínio do seu site ou empresa. Aprender a

configurar o DNS corretamente é importante, caso contrário você pode ter

problemas ao enviar e-mails (pela falta do DNS reverso), ou mesmo ter problemas

mais graves com o registro do domínio.

A Apache permite hospedar vários sites no mesmo servidor, recurso chamado

de virtual hosts. Apenas os sites mais acessados são capazes de saturar os

recursos de um servidor dedicado de configuração razoável, por isso hospedar

vários sites no mesmo servidor é uma forma de economizar recursos e trabalho.

Page 3: Servidor LAMP

Instalando o Apache

O Apache pode ser dividido em duas grandes famílias: 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, além de

oferecer novos módulos e mais opções de segurança, mas sua adoção foi retardada

nos primeiros anos por um detalhe muito simples: o fato de ele ser incompatível

com os módulos compilados para o Apache 1.3. Como os módulos são a alma do

servidor web, muitos administradores ficavam amarrados ao Apache 1.3 devido à

falta de disponibilidade de alguns módulos específicos para o Apache 2.

Conforme o tempo foi passando, mais e mais módulos foram portados, sem falar de

novos módulos desenvolvidos diretamente para uso em conjunto com o Apache 2.

Hoje em dia, o Apache 1.3 ainda sobrevive em muitas instalações devido à inércia

natural que temos dentro do ramo de servidores, mas não existe nenhum bom

motivo para usá-lo em uma nova instalação. O Apache 2 é simplesmente melhor

em todos os quesitos.

Ao instalar o Apache 2, o suporte a SSL é instalado automaticamente junto com o

pacote principal. Instale também o pacote apache2-utils, que contém diversos

utilitários de gerenciamento que usaremos a seguir:

# apt-get install apache2 apache2-utils

Se desejar ativar o suporte a páginas seguras, você vai precisar também do pacote

"ssl-cert", necessário para ativar o suporte a SSL e gerar os certificados. Ele não é

instalado por padrão ao fazer uma instalação 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

contém o Apache 2 e os utilitários:

# yum install httpd

Diferente do Debian, o serviço não será configurado para ser ativado no boot por

padrão e nem mesmo inicializado automaticamente após a instalação. Para ativá-lo,

é necessário ativar o serviço e, em seguida, criar os links para início automático

usando o chkconfig

# service httpd start

Page 4: Servidor LAMP

# chkconfig httpd on

Seguindo os nomes dos pacotes, no Debian o serviço 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 endereço "http://127.0.0.1", você verá uma página de boas-vindas,

que indica que o servidor está funcionando. Se não houver nenhum firewall no

caminho, ele já estará acessível a partir de outros micros da rede local ou da

internet:

Por enquanto, temos apenas uma versão básica do Apache, que simplesmente

exibe arquivos html e executa scripts CGI. Por padrão, o diretório raiz do servidor

Web é "/var/www" (no Debian) ou "/var/www/html" (no Fedora). Com isso, a

página "http://seu.servidor/index.html" é, na verdade, o arquivo

"/var/www/index.html" ou "/var/www/html/index.html".

Como de praxe, o diretório raiz é definido através de uma opção dentro do arquivo

principal de configuração (a opção "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 instalação do Apache propriamente

dita é bastante simples, o grande desafio é configurar e otimizar o servidor.

Page 5: Servidor LAMP

Instalando o suporte a PHP

No início, existiam apenas páginas html estáticas, com links atualizados

manualmente. Depois, surgiram os scripts CGI (geralmente escritos em Perl), que

permitiram criar vários tipos de formulários e automatizar funções. Finalmente,

surgiu o PHP, adotado rapidamente como a linguagem padrão para criação de todo

tipo de página dinâmica, fórum ou gerenciador de conteúdo.

Além da linguagem ser bastante flexível, um script em PHP chega a ser mais de

100 vezes mais rápido que um script CGI equivalente, além de mais seguro. Em

resumo, um script CGI é um executável, que precisa ser carregado na memória,

executado e descarregado cada vez que é feita uma requisição. No caso do PHP, o

interpretador fica carregado continuamente e simplesmente vai executando de

forma contínua os comandos recebidos dos scripts incluídos nas páginas.

Para quem programa em Perl, existe a possibilidade de utilizar o mod-perl,

instalável através do pacote "apache-mod-perl" ou "libapache2-mod-perl2". Assim

como o PHP, o mod-perl é um módulo do Apache que fica continuamente carregado

na memória, executando os scripts Perl de uma forma bem mais rápida e segura

que os scripts CGI.

Voltando ao assunto principal, no Debian o suporte a PHP é instalado através do

pacote "php5" (ou "php4", de acordo com a versão escolhida). Para instalá-lo,

basta usar o gerenciador de pacotes da distribuição em uso, como em:

# apt-get install php5

No caso do CentOS e do Fedora, é usado um pacote unificado, o "php", que inclui

a versão mais recente do interpretador, eliminando a confusão:

# yum install php

Com o interpretador PHP instalado, falta instalar o módulo do Apache 2, que

no Debian está disponível através do pacote "libapache2-mod-php5" (ou

"libapache2-mod-php4", de acordo com a versão desejada):

# apt-get install libapache2-mod-php5

O módulo "libapache2-mod-php5" é instalado dentro da pasta

"/usr/lib/apache2/modules/" e é ativado de uma forma diferente que no

Apache 1.3. Ao invés de adicionar as linhas que ativam o módulo e criam as

Page 6: Servidor LAMP

associações de arquivos no final do arquivo httpd.conf, são criados dois arquivos

dentro da pasta "/etc/apache2/mods-available/", com, respectivamente, a ativação

do módulo e as associações de arquivos. Os links são criados automaticamente ao

instalar o pacote, mas você pode tirar qualquer dúvida usando o comando

a2enmod:

# a2enmod php5

Não esqueça de reiniciar o serviço para que o módulo seja carregado e a

configuração 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, através da criação do arquivo

"/etc/httpd/conf.d/php.conf". Dentro dele, você encontra as linhas que carregam o

módulo e criam a associação com os arquivos .php, como em:

LoadModule php5_module modules/libphp5.so

AddHandler php5-script .php

AddType text/html .php

DirectoryIndex index.php

Se você tiver a curiosidade de olhar o conteúdo dos arquivos "/etc/apache2/mods-

enabled/php5.conf" e "/etc/apache2/mods-enabled/php5.load" em uma distribuição

derivada do Debian, vai perceber que as linhas contidas neles são muito similares.

Na verdade, o Apache usado no Debian e o usado no CentOS é o mesmo software,

apenas configurado de forma ligeiramente diferente.

Com o suporte a PHP ativado, o Apache continua exibindo diretamente páginas com

extensão .htm ou .html, mas passa a entregar as páginas .php ou .phps ao

interpretador php, que faz o processamento necessário e devolve uma página html

simples ao Apache, que se encarrega de enviá-la ao cliente.

Estas páginas processadas são "descartáveis": cada vez que um cliente acessa a

página, ela é processada novamente, mesmo que as informações não tenham sido

alteradas. Dependendo do número de funções usadas e da complexidade do código,

Page 7: Servidor LAMP

as páginas em PHP podem ser bastante pesadas. Não é incomum que um site com

100.000 pageviews diários (o que corresponde a umas 5 a 8 requisições por

segundo nos horários de pico) precise de um servidor dedicado, de configuração

razoável.

Quase sempre, os sistemas desenvolvidos em PHP utilizam também um banco de

dados MySQL ou Postgre SQL. Naturalmente, é perfeitamente possível que os

scripts simplesmente salvem as informações em arquivos de texto dentro do

diretório do site, mas isso resultaria em um desempenho muito ruim, sem falar em

eventuais brechas de segurança. Utilizar um banco de dados permite armazenar um

volume muito maior de informações, acessíveis de forma mais segura.

Para que o interpretador PHP seja capaz de acessar o banco de dados, é necessário

ter instalado (além do servidor MySQL propriamente dito) o módulo "php5-mysql"

(ou "php4-mysql"), que faz a junção entre os dois componentes:

# apt-get install php5-mysql

No caso do PostgreSQL, é utilizado o módulo "php5-pgsql", que tem a mesma

função:

# apt-get install php5-pgsql

Não se esqueça de reiniciar o Apache, para que as alterações 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 extensão .php) dentro da

pasta do servidor web, contendo apenas a linha abaixo:

<?php phpinfo( ); ?>

Salve o arquivo e abra a página através do navegador. A função "phpinfo", que

usamos no arquivo, faz com que o servidor exiba uma página com detalhes da

configuração do PHP e dos módulos ativos:

Page 8: Servidor LAMP

Depois de verificar, remova o arquivo, pois não é interessante que essas

informações fiquem disponíveis ao público.

Page 9: Servidor LAMP

Instalando o MySQL

O MySQL é um banco de dados extremamente versátil, usado para os mais diversos

fins. Você pode acessar o banco de dados a partir de um script em PHP, através de

um aplicativo desenvolvido em C ou C++, ou praticamente qualquer outra

linguagem (até mesmo através de um shell script! :).

Existem vários livros publicados sobre ele, por isso vou me limitar a falar sobre a

instalação e a configuração necessária 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 distribuições

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 também os pacotes "mysql-client" (o cliente que permite acessar

os dados e fazer modificações no banco de dados) e o "mysql-navigator" (uma

interface gráfica para ele).

Para que o serviço seja configurado para ser carregado durante o boot, ative-o

usando o chkconfig:

# chkconfig mysqld on

Antes de iniciar o serviço, rode o comando "mysql_install_db". Ele prepara o

terreno, criando a base de dados "mysql" (usada para armazenar a configuração do

servidor MySQL, incluindo informações sobre os usuários e sobre as demais bases

de dados) e também 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

Page 10: Servidor LAMP

No caso do Fedora e do CentOS, o serviço se chama "mysqld", ao invés de

simplesmente "mysql", como no caso do Debian:

# service mysqld start

O MySQL possui um usuário padrão chamado "root", que, assim como o root do

sistema, tem acesso completo a todas as bases de dados e é usado para fazer a

configuração inicial do sistema, assim como tarefas de manutenção. Esta conta

inicialmente não tem senha, por isso você deve definir uma logo depois de iniciar o

serviço, 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, é necessário acrescentar o

parâmetro "-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 é necessário incluir a senha antiga ao executar o comando,

antes de continuar, já que do contrário teríamos uma brecha óbvia de segurança.

Continuando, depois de definir a senha, o próximo passo é criar uma base de

dados. Você pode instalar vários scripts diferentes (um fórum, um chat e um gestor

de conteúdo, por exemplo) no mesmo servidor e, inclusive, várias cópias de cada

um. Isso é cada vez mais utilizado, tanto dentro de sites que oferecem diversos

serviços, quanto em servidores compartilhados, onde os responsáveis por cada site

têm a liberdade de instalar os sistemas de sua preferência.

Page 11: Servidor LAMP

Instalando o phpMyAdmin

Depois dessa configuração inicial, você pode experimentar instalar um gerenciador

gráfico para facilitar a manutenção do seu servidor MySQL. Uma boa opção 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 instalação em outras distribuições, que não incluam o pacote por

padrão, pode ser encontrado no: http://www.phpmyadmin.net/.

O phpMyAdmin é um gestor de configuração escrito em PHP que trabalha em

conjunto com o Apache. Ele permite que você crie bases de dados, ajuste as

permissões de acesso dos usuários, faça backup, e diversas outras atividades

administrativas de uma forma mais simples que através do prompt de comando.

Uma vez instalado, ele pode ser acessado através do endereço

"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 necessário ter acesso a todas as

bases ou fazer backup de tudo, e uma das contas restritas para acessar uma base

específica:

Page 12: Servidor LAMP

O acesso via HTTPS é preferível para acessos feitos via web, já que evita que as

senhas de acesso e outras informações 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 é necessário também ativar o suporte a SSL na

configuração do Apache.

Caso, mesmo depois de gerar o certificado e ativar o SSL no Apache, você continue

recebendo um erro ao tentar acessar a interface do phpMyAdmin via SSL,

experimente reconfigurar o pacote usando o dpkg-reconfigure, como em:

# dpkg-reconfigure phpmyadmin

Selecione a opção "apache2" quando o script perguntar sobre o servidor web usado

e responda "sim" quando ele perguntar se você deseja reiniciar o serviço:

No CentOS e em diversas outras distribuições o phpMyAdmin vem configurado por

padrão para permitir conexões apenas a partir da máquina local, uma precaução de

segurança. 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 seção "<Directory "/usr/share/phpmyadmin">", como em:

<Directory "/usr/share/phpmyadmin">

Order Deny,Allow

# Deny from all

Allow from 127.0.0.1

</Directory>

Uma observação importante é que ao ser usado em conjunto com o Apache,

instalado no mesmo servidor que ele, o MySQL é acessado apenas localmente,

Page 13: Servidor LAMP

através da interface de loopback. O Apache envia a requisição ao módulo PHP que

faz o acesso ao banco de dados, tudo localmente. Nessa configuração, o servidor

MySQL não deve ficar disponível para a Internet. Configure o firewall para bloquear

a porta 3306 usada pelo servidor MySQL, além de todas as outras portas que não

forem explicitamente necessárias.

Caso o servidor MySQL precise ficar acessível 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 endereços IP dos

servidores que forem ter acesso. Como os servidores dedicados sempre utilizam

endereços fixos (ao contrário dos servidores domésticos), esta configuração fica

mais simples.

Para administrar seu servidor MySQL remotamente, o ideal é que se conecte ao

servidor via SSH e faça todo o trabalho através dele. Se precisar acessar

diretamente alguma ferramenta de configuração, como o Webmin ou o

phpMyAdmin, você pode criar um túnel (novamente usando o SSH) ligando a porta

correspondente do servidor a uma porta da sua máquina e fazer o acesso através

dela.

Page 14: Servidor LAMP

Criando Virtual Hosts

O suporte a virtual hosts é um daqueles recursos fundamentais, que possibilitaram

o surgimento da Internet da forma como a conhecemos hoje. Ele permite hospedar

diversos sites, com domínios ou subdomínios diferentes usando um único servidor e

um único endereço IP. Os únicos limitantes com relação ao volume de sites que é

possível hospedar são os recursos de hardware do servidor e a banda disponível.

Serviços de hospedagem compartilhada (os planos de shared hosting) utilizam este

recurso de forma intensiva, de forma a espremer o maior número possível de

clientes em cada servidor, sem falar nos serviços 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, memória, processamento e link) são divididos entre os

sites hospedados, assim como vários programas abertos simultaneamente

disputam os recursos da máquina. Isso faz muito sentido no caso de sites pequenos

ou médios, que não possuem um número suficiente de visitas para saturarem,

sozinhos, o servidor.

Em geral, o servidor é configurado de forma que os usuários tenham direito a uma

determinada quota de espaço 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 instalação de gestores de conteúdo como o WordPress. Entretanto, eles

não podem instalar novos pacotes nem alterar a configuração do servidor. Feitas as

apresentações, vamos à configuração. :)

Invariavelmente, ao hospedar vários domínios, você precisa configurar um servidor

DNS para responder por todos os domínios hospedados no servidor, entregando o

endereço IP do seu servidor Apache. O cliente acessa então o servidor, solicitando o

site desejado, como em "joao.com.br"; o servidor web verifica a configuração e

entrega os arquivos apropriados ao cliente.

A configuração do servidor DNS é pouco intuitiva, mas não chega a ser tão

complicada quanto muitos dizem. Em resumo, você precisaria instalar o bind no

servidor e editar a configuração, adicionando uma nova configuração de zona para

cada domínio hospedado. Isso é feito em duas etapas. Na primeira, você edita o

Page 15: Servidor LAMP

arquivo named.conf, adicionando uma entrada com esta, especificando o domínio e

o arquivo com a configuração:

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

configuração similar a esta, especificando o domínio, o nome do servidor e o

endereço IP usado por ele, assim como o nome e o endereço IP do servidor DNS

secundário:

@ 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

Não é necessário que o DNS esteja instalado no mesmo servidor que o Apache, a

função dele será unicamente responder às requisições dos clientes, fornecendo o IP

correto.

Para ativar o uso dos virtual hosts, o primeiro passo é criar uma pasta separada

para cada site que será hospedado. Você pode usar a própria pasta "/var/www",

como em:

# mkdir /var/www/joao

# mkdir /var/www/maria

Page 16: Servidor LAMP

Em seguida, é necessário adicionar uma nova seção dentro da configuração do

Apache para cada um, logo depois da configuração do site default.

Nas distribuições derivadas do Debian, são usados arquivos de configuração

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. Criaríamos, então, um arquivo para

cada site, contendo o seguinte:

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

<VirtualHost *:80>

ServerAdmin [email protected]

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 [email protected]

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, contém apenas o e-mail de contato do administrador do site.

A mesma configuração é usada se você quiser hospedar os sites usando

subdomínios, como em "joao.gdhn.com.br" e "maria.gdhn.com.br". Nesse caso, não

usamos o "www" e, por isso, não precisamos da linha "ServerAlias":

Page 17: Servidor LAMP

<VirtualHost *:80>

ServerAdmin [email protected]

ServerName maria.gdhn.com.br

DocumentRoot /var/www/maria

</VirtualHost>

Depois de feita a configuração, 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 configuração funcione, é necessário editar também o arquivo

"/etc/apache2/sites-available/default", substituindo as linhas:

NameVirtualHost *

<VirtualHost *>

Por:

NameVirtualHost *:80

<VirtualHost *:80>

Essa configuração é necessária para que você possa ativar o suporte a SSL para os

virtual hosts. Sem ela, além do SSL não funcionar, você precisaria modificar a

configuração de cada um, usando sempre "<VirtualHost *>" ao invés de

"<VirtualHost *:80>".

Você pode adicionar quantos sites quiser usando esses mesmos passos. Sempre

que alterar a configuração, é necessário atualizar a configuração do Apache. Nesse

caso, o parâmetro "reload" é suficiente (o "force-reload" é necessário apenas ao

ativar ou desativar módulos):

# /etc/init.d/apache2 reload

Além de configurar o servidor web, é preciso configurar também um servidor FTP

ou SFTP, para que os usuários possam acessar os arquivos de suas respectivas

pastas, a fim de atualizarem seus sites. A forma mais simples de fazer isso é criar

Page 18: Servidor LAMP

um usuário para cada um e dar acesso a eles via FTP. Outra opção é utilizar o

SFTP, que permite acesso seguro.

Veja que as três coisas acabam se integrando: o Bind resolve os nomes de domínio,

o Apache fornece as páginas e o FTP ou SFTP permite que os webmasters atualizem

os sites.

Continuando, ao utilizar o Fedora, CentOS ou outra distribuição derivada do Red

Hat, a configuração de todos os virtual hosts é adicionada na seção final do arquivo

"/etc/httpd/conf/httpd.conf", depois do "# Section 3: Virtual Hosts". Procure

pela seção "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 configuração 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 diferença nesse caso é que para desativar um determinado site você

precisa abrir novamente o arquivo de configuração e remover (ou comentar) a

seção referente a ele, em vez de utilizar o "a2dissite", como no Debian.

Depois de fazer alterações no arquivo, é necessário recarregar a configuração para

que elas entrem em vigor:

# service httpd reload

Page 19: Servidor LAMP

Fazendo dessa forma, os logs de acessos serão misturados no log principal do

Apache, o "/var/log/apache2/access.log". Isso não é problema se você está

utilizando o Google Analytics ou outra ferramenta externa para auditar os acessos

dos sites (ou se simplesmente você não está preocupado em medir os acessos),

mas é um grande obstáculo se você pretende usar o webalizer para gerar os

relatórios de acesso.

Para que cada site tenha seus logs separados, você deve adicionar duas linhas

adicionais, na configuração de cada virtual host, especificando a localização do

arquivo que será usado. Você com certeza não gostaria que os logs ficassem

disponíveis ao público, por isso é importante usar diretórios diferentes para os

arquivos do site e para os logs, como em:

<VirtualHost *:80>

ServerAdmin [email protected]

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 também salvar os logs na pasta de logs padrão do Apache, de forma a

se beneficiar do rotacionamento automático de logs oferecido pelo logrotate. Nesse

caso, você precisa apenas especificar um arquivo de log diferente para cada site,

todos salvos dentro da pasta padrão, como em:

<VirtualHost *:80>

ServerAdmin [email protected]

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

Page 20: Servidor LAMP

</VirtualHost>

Note que, como todos os sites ficam hospedados no mesmo servidor, a única forma

de chegar ao site desejado é fazendo o acesso através do domínio. Se você tentar

acessar diretamente o IP do servidor, vai cair no site padrão (configurado através

do arquivo "/etc/apache2/sites-available/default"), que, por padrão, usa o raiz da

pasta "/var/www". Esta página default pode ser usada para mostrar alguma

publicidade da empresa responsável pelo servidor, ou uma lista dos sites

hospedados, por exemplo.

Page 21: Servidor LAMP

Otimizando a configuração do servidor

Ao colocar um site no ar, seu objetivo é quase sempre fazer com que ele seja

acessado pelo maior volume possível de visitantes. Entretanto, o sucesso tem um

preço: o maior volume de requisições faz com que seu servidor web seja mais

exigido e ele passe a consumir mais recursos da máquina. A partir de um certo

ponto, o servidor passará a ficar saturado nos horários de maior acesso, tornando o

acesso ao site lento e fazendo com que o site comece a perder visitantes.

Uma das soluções seria simplesmente atualizar o hardware do servidor, resolvendo

o problema na base da força bruta. A segunda seria otimizar a configuração do

Apache, fazendo com que ele trabalhe de forma mais eficiente. Não existe uma

"configuração perfeita" para o Apache, já que a configuração ideal varia de acordo

com o tipo de tráfego do site, mas aqui vão algumas dicas que podem ajudar.

Uma das configurações mais diretamente relacionadas à performance do servidor e

ao consumo de memória é o número de instâncias do servidor httpd. O Apache é

capaz de responder a um número indefinido de acessos simultâneos, de acordo

com a velocidade do link e dos recursos da máquina. Para cada requisição

simultânea, é necessário que exista uma instância do Apache carregada na

memória.

Quando o cliente acessa uma página, ele monopoliza uma dessas instâncias abertas

até que a requisição seja concluída, ou seja, até que a página seja carregada ou o

arquivo baixado. Em horários de alta demanda, são abertas mais instâncias do

servidor Apache, que vão sendo fechadas (para economizar memória) conforme os

acessos diminuem.

Nos momentos de pico, o Apache precisa manter mais processos ativos, o que

aumenta o consumo de memória no servidor. O uso de processamento, por sua

vez, varia bastante de acordo com o tipo de páginas servidas. Páginas em PHP com

código não otimizado, scripts em CGI ou servlets Java, por exemplo, podem

consumir bastante processamento, fazendo com que o processador se torne um

gargalo muito antes da memória RAM, enquanto páginas estáticas ou arquivos

disponibilizados para download consomem pouco processamento, fazendo com que

a memória RAM e a otimização do servidor sejam as principais prioridades.

Page 22: Servidor LAMP

Ajustando o número de processos

O primeiro passo é verificar se está sendo usado o módulo mpm-prefork (usado por

default na maioria das distribuições) ou o módulo mpm-worker, já que ambos são

configurados em seções diferentes do arquivo.

No caso das distribuições derivadas do Debian, as duas versões são disponibilizadas

através de pacotes separados, de forma que você precisa apenas verificar qual dois

dois está instalado, usando o comando "dpkg -l | grep apache". Ele retornará uma

lista como:

# dpkg -l | grep apache

ii apache2 2.2.3-4+etch4 Next generation, scalable, extendable web se

ii apache2-mpm-prefork 2.2.3-4+etch4 Traditional model for Apache

HTTPD 2.1

ii apache2-utils 2.2.3-4+etch4 utility programs for webservers

ii apache2.2-common 2.2.3-4+etch4 Next generation, scalable, exten

ii libapache2-mod-fcgid 1.10-2 an alternative module compat with

mod_fastcg

ii libapache2-mod-php5 5.2.0-8+etch11 server-side, HTML-embedded scri

No exemplo, podemos ver que está sendo usado o pacote "apache2-mpm-prefork",

que é justamente a versão usada por padrão.

O mpm-prefork é a versão tradicional do Apache, onde cada instância inicia um

único thread e atende a uma única requisição por vez, isolando o processamento de

cada página servida. Isso torna a operação do servidor mais estável e menos

vulnerável a módulos ou páginas mal escritas, mas, em compensação, consome um

pouco mais de memória RAM que o mpm-worker, onde cada instância do Apache

pode abrir vários threads, de acordo com a necessidade.

Para pequenos servidores, onde você não precise necessariamente extrair cada

gota de desempenho do servidor, o mpm-prefork é a escolha mais segura, mas em

casos em que o servidor precise operar no limite, você pode realizar testes com o

mpm-worker de forma a avaliar se a redução no consumo de memória é

significativa.

Voltando à configuração, o número de instâncias abertas (ao usar o mpm-prefork)

é determinada pela seção abaixo dentro do arquivo

"/etc/apache2/apache2.conf":

# prefork MPM

Page 23: Servidor LAMP

<IfModule mpm_prefork_module>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 150

MaxRequestsPerChild 0

</IfModule>

A opção "StartServers" determina o número padrão de instâncias do Apache que

ficarão carregadas na memória, respondendo a requisições. Cada instância ocupa

cerca de 7 MB de memória (variando de acordo com as opções de compilação

usadas ao gerar o pacote e os módulos carregados), de forma que 5 instâncias

consomem cerca de 35 MB de memória do servidor.

Além das instâncias principais, temos instâncias "reservas" (spares), que ficam

disponíveis para absorver rapidamente picos de acesso, sem que o Apache tenha

que perder tempo carregando mais instâncias para só depois começar a responder

às requisições. As opções "MinSpareServers" e "MaxSpareServers" determinam o

número mínimo e máximo de "reservas", sendo que o número real flutua entre os

dois parâmetros, de acordo com a demanda.

A opção "MaxClients" é a parede de concreto, o número máximo de conexões

simultâneas que o Apache aceita manter abertas, independentemente da demanda.

Quando esse número é atingido, o acesso ao site fica cada vez mais lento, pois

cada novo visitante "entra na fila" e precisa esperar que uma das instâncias do

Apache fique livre, antes de conseguir carregar cada página.

Essa configuração default do Apache é adequada a um site de baixa demanda, onde

o servidor passa a maior parte do tempo atendendo a um pequeno volume de

requisições simultâneas, mas recebe picos de tráfego esporadicamente. Por padrão,

o servidor carregará apenas 5 processos, manterá mais 5 a 10 spares ativos e

poderá carregar mais instâncias conforme necessário, até o limite máximo de 150

instâncias permitidas.

Para um servidor dedicado, que hospede um site com muitas visitas, é interessante

ajustar estes valores de acordo com a demanda. Uma forma fácil de verificar o

Page 24: Servidor LAMP

status do servidor é ativar a diretiva "server-status" dentro do arquivo

"/etc/apache2/apache2.conf". Adicione as linhas abaixo no final do arquivo:

<Location /server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from 200.234.23.233

# (onde o 200.234.23.233 é o IP de onde o relatório será acessado)

</Location>

Ative a configuração usando o comando "/etc/init.d/apache2 reload". A partir daí,

você pode ver um instantâneo do status do servidor acessando a pasta "server-

status", como em "http://www.gdhn.com.br/server-status", a partir do navegador.

A oitava linha indica o número de instâncias abertas, como em:

8 requests currently being processed, 5 idle workers

Nesse exemplo temos 8 conexões abertas e 5 instâncias reservas do Apache

abertas, prontas para receber novas conexões. A velocidade do acesso ao site está

normal. Mas, o que acontece no caso de um pico de acesso, com mais do que 150

acessos simultâneos? Na configuração padrão você teria:

150 requests currently being processed, 0 idle workers

Ou seja, o Apache responde às primeiras 150 conexões e coloca as demais na fila,

fazendo com que os visitantes precisem esperar até que algum dos processos

abertos termine de atender o visitante anterior antes de servirem a requisição.

Nesse ponto o acesso ao site começa a ficar lento, com as páginas demorando mais

e mais para começarem a ser carregadas. Em casos mais extremos, o tempo de

espera poderia ser tamanho que o site ficaria virtualmente fora do ar. É o que

muitas vezes acontece com links publicados em sites muito acessados, como o

slashdot.org.

Isso pode ser minimizado de duas formas. A primeira é aumentando o número de

instâncias ativas do Apache (de forma que o servidor tenha instâncias suficientes

para atender a todas as requisições sem precisar abrir novos processos) e

Page 25: Servidor LAMP

aumentando o valor configurado na opção "MaxClients", de forma que o servidor

possa atender a um volume maior de requisições nos horários de pico.

Os valores ideais variam de acordo com o volume de memória disponível no

servidor e a quantidade de memória usada por cada processo do Apache. Comece

usando o comando "ps -ylC apache2 --sort:rss" (no Debian/Ubuntu) ou "ps -ylC

httpd --sort:rss" (no Fedora/CentOS) para verificar o volume de memória usado por

cada instância do Apache:

# ps -ylC apache2 --sort:rss

O comando exibe uma linha para cada processo do Apache ativo, de forma que a

lista pode ser longa. O volume de memória gasto por cada um (em kbytes) é

mostrado na oitava coluna. Descartando as primeiras e as últimas linhas, você tem

uma boa aproximação dos valores médios, como em:

S 33 17530 16102 0 78 0 6008 5038 341548 ? 00:00:00 apache2

S 33 17491 16102 0 75 0 6036 5036 354540 ? 00:00:00 apache2

S 33 17529 16102 0 75 0 6036 5038 357283 ? 00:00:00 apache2

S 33 17472 16102 0 75 0 6044 5038 359161 ? 00:00:00 apache2

S 33 17438 16102 0 75 0 6056 5036 351130 ? 00:00:00 apache2

Veja que no exemplo cada processo consome aproximadamente 6 MB de memória

RAM. Estes valores não devem ser levados ao pé da letra, pois o ps não leva em

conta as áreas de memória compartilhadas entre os processos, de forma que na

prática o consumo total é sempre um pouco mais baixo. De qualquer forma, estes

são os melhores números que temos.

O próximo passo é verificar quanto os demais serviços ativos no servidor (MySQL,

servidor de e-mails, etc.) consomem, de forma a ter uma estimativa de quanta

memória está disponível para uso do Apache. Uma forma simples de fazer isso é

desativar temporariamente o Apache (/etc/init.d/apache2 stop) e usar o comando

"free" para ver a memória disponível, como em:

# free

Total used free shared buffers cached

Mem: 127132 124640 2492 0 40732 45236

-/+ buffers/cache: 35804 91328

Swap: 409616 48 409568

Page 26: Servidor LAMP

A linha "Mem" mostra o total de memória usada, incluindo o cache de disco. Ela

sempre mostra que quase toda a memória está ocupada, pois é normal que o

sistema utilize a memória disponível para fazer cache de disco. O que realmente

nos interessa é a segunda linha (-/+ buffers/cache), que no exemplo mostra que o

servidor possui cerca de 90 MB de memória disponível (nesse exemplo estou

usando um VPS com apenas 128 MB de memória, que serve como exemplo de

servidor com poucos recursos).

Se cada processo do Apache ocupa cerca de 6 MB de memória, significa que o

servidor poderia manter de 15 a 18 instâncias carregadas na memória (levando em

conta que o consumo real é sempre um pouco inferior ao mostrado pelo ps) antes

de começar a usar um volume significativo de memória swap. Uma boa

configuração nesse caso seria:

# prefork MPM

<IfModule mpm_prefork_module>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 18

MaxRequestsPerChild 0

</IfModule>

Permitir que o Apache abra mais instâncias acabaria sendo contra produtivo, pois o

uso de muita memória swap derrubaria o desempenho do servidor, fazendo com

que cada instância demorasse mais para processar cada página. Com isso, o

número total de páginas servidas acabaria sendo menor do que usando apenas 18

processos.

No caso de um servidor com 1 GB de memória RAM, por outro lado, provavelmente

teríamos 900 MB ou mais de memória disponível para o Apache, de forma que uma

configuração mais adequada seria:

# prefork MPM

<IfModule mpm_prefork_module>

StartServers 25

Page 27: Servidor LAMP

MinSpareServers 25

MaxSpareServers 50

MaxClients 200

MaxRequestsPerChild 0

</IfModule>

Com isso, teríamos 25 processos "fixos" do Apache, complementados por mais 25 a

50 spares, número que pode crescer até um máximo de 200 processos simultâneos

nos horários de pico. A partir daí, você poderia monitorar o volume de memória

livre no servidor (através do comando "free") e o volume de acessos através da

página de estatísticas e ajustar as opções "StartServers" e "MinSpareServers" de

acordo com o número médio de acessos simultâneos, de forma que o número de

processos do Apache e de spares disponíveis seja sempre um pouco maior do que o

número médio de conexões ao servidor:

Page 28: Servidor LAMP

Outras opções

A opção "MaxRequestsPerChild", incluída logo depois no arquivo, limita o número

de requisições que cada processo do Apache pode responder antes de ser

encerrado e substituído por outro. Ela não tem um efeito direto sobre o

desempenho, servindo apenas como uma proteção contra eventuais vazamentos de

memória, que pudessem fazer o processo crescer até ocupar toda a memória do

servidor. Uma boa configuração é o valor "1000", que evita que os processos sejam

fechados muito freqüentemente (o que prejudicaria o desempenho), mas ao

mesmo tempo faz com que a opção atenda a seu propósito:

MaxRequestsPerChild 1000

Como de praxe, a solução definitiva para melhorar o desempenho do servidor,

permitindo que ele atenda a mais requisições simultâneas, é instalar mais memória

RAM, de forma que ele possa manter mais instâncias do Apache carregadas na

memória e possa fazer mais cache de disco (reduzindo o volume de operações de

leitura no HD). É importante monitorar constantemente o uso de memória do

servidor e atualizar o servidor conforme necessário.

Outra opção que afeta negativamente o desempenho é a "HostNameLookups", que

faz com que o Apache verifique a origem de cada acesso, fazendo uma busca de

domínio. Ativar essa opção permite criar estatísticas de acesso mais detalhadas,

incluindo os países e provedores de acesso usados pelos visitantes, mas tem um

impacto negativo muito grande na performance de um servidor congestionado. No

Apache 2 ela já vem desativada por padrão, mas em versões antigas era necessário

desativá-la manualmente:

HostNameLookups Off

Se você faz questão de gerar estatísticas de acesso detalhadas, pode obter o

mesmo resultado usando o "logresolve", um aplicativo que realiza as operações de

resolução de nomes diretamente nos arquivos de log. Você pode criar um script

para fazer com que ele seja executado uma vez por dia, por exemplo. A sintaxe do

comando é a seguinte:

# logresolve -s access.stats -c < access.log > access_log.new

No exemplo, o "access.log" é o arquivo original de log, o "access_log.new" é o

arquivo modificado que será gerado e o "access.stats" é o arquivo onde serão

salvas as estatísticas.

Page 29: Servidor LAMP

Continuando, se o seu servidor já está operando no limite, recebendo mais

requisições do que consegue atender nos horários de pico, uma foma simples de

reduzir o carregamento do servidor é ajustar a opção "KeepAliveTimeout", que

determina o tempo que os processos do Apache devem aguardar por novas

requisições do mesmo cliente antes de serem finalizadas.

A idéia por trás dessa opção é permitir que a mesma conexão TCP seja usada para

enviar diversos arquivos, se possível toda a página que está sendo carregada,

incluindo as imagens. Com isso, o tempo de carregamento é reduzido (já que não é

mais necessário abrir uma nova conexão para cada elemento da página a ser

carregado) e os processos do Apache ficam logo livres para responder a outras

requisições.

O default são 15 segundos, o que é um valor seguro, já que mesmo as conexões

mais lentas não chegam a ter um tempo de latência tão alto. O problema é que o

tempo de espera faz com que os processos fiquem ativos na memória por até 15

segundos a mais do que realmente precisariam, consumindo memória e reduzindo

o número de clientes simultâneos que o servidor pode atender.

Você pode aumentar de forma considerável o volume de requisições atendidas pelo

servidor reduzindo o valor de 15 para 3 segundos. Um exemplo de configuração

completa é:

KeepAlive On

MaxKeepAliveRequests 180

KeepAliveTimeout 3

A opção "KeepAlive On" deve estar presente, já que é ela a responsável por ativar o

recurso. A opção "MaxKeepAliveRequests" determina o número máximo de

conexões que devem ser mantidas ativas. Ela deve ser setada com um valor um

pouco mais baixo que o da opção "MaxClients", que vimos anteriormente.

Concluindo, você pode simular tráfego no seu servidor, verificando como ele se

comporta com níveis variados de tráfego usando o comando "ab", que faz parte do

pacote "apache2-utils". Chame-o indicando o número de requisições simultâneas e

a página que será carregada, como em:

$ ab -n 1000 -c 20 http://www.meusite.com/teste.php

Page 30: Servidor LAMP

Nesse exemplo, estamos fazendo 1000 acessos à página, mantendo 20 requisições

simultâneas. Se possível, lance o teste a partir de outro servidor com link rápido,

ou peça para vários amigos rodarem o comando simultaneamente, cada um usando

sua própria conexão. Isso transformará o teste em algo mais parecido com uma

situação normal, onde o servidor receba um pico de acessos.

Uma opção que não tem a ver com o desempenho, mas que ajuda a reduzir o

volume de ataques casuais contra o seu servidor é a opção "ServerTokens". Na

maioria das distribuições, ela vem configurada com o valor "Full", que faz com que

seu servidor disponibilize informações detalhadas sobre a versão do apache e os

módulos utilizados, como "Apache/2.2.3 Debian PHP/5.2.0-8etch11", o que facilita

bastante o trabalho dos atacantes. Você pode evitar isso configurando a opção com

o valor "Prod", que faz com que o servidor responda apenas "Apache", sem nenhum

detalhe adicional (caso a linha não esteja presente, basta adicioná-la no final do

arquivo):

ServerTokens Prod

Outra configuração importante é bloquear o acesso a includes e arquivos de

configuração em geral colocados dentro dos diretórios de dados do site. Isso evitará

que arquivos .inc, .tpl, .sql e de outras extensões tipicamente usadas em arquivos

de configuração e em includes usados na montagem das páginas possam ser

acessados diretamente pelos visitantes. Para isso, inclua na configuração uma

seção "filesmatch", especificando as extensões cuja exibição deve ser bloqueada,

como em:

<filesmatch

“.(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|sh|theme|module)$">

Deny from all

</filesmatch>

Depois de terminar a edição do arquivo "/etc/apache2/apache2.conf", não se

esqueça de aplicar as alterações usando o comando:

# /etc/init.d/apache2 reload

ou:

# service httpd reload