Capítulo 12. Apache

Índice

Introdução
Versão
Um resumo da História do Apache
Enviando Correções/Contribuindo com o projeto
Características do Apache
Ficha técnica
Requerimentos
Arquivos de log criados pelo Apache
Instalação
Iniciando o servidor/reiniciando/recarregando a configuração
Opções de linha de comando
Configurações Básicas do Apache
Configurando a porta padrao
Adicionando uma página no Apache
Configurando as interfaces que o Apache atenderá
Especificando endereços/portas adicionais (a diretiva Listen)
Restrições de Acesso
Especificando opções/permissões para as páginas
Autorização
Autenticação
Usando autorização e autenticação juntos
O arquivo .htaccess
Usando a diretiva SetEnvIf com Allow e Deny
A diretiva <Limit>
Diretiva <LimitExcept>
Definindo documentos de erro personalizados
Módulos DSO
Sistema de Log do Apache
AgentLog
ErrorLog
CustomLog
RefererLog
RewriteLog
RewriteLogLevel
ScriptLog
ScriptLogBuffer
ScriptLogLength
LogFormat
TransferLog
LogLevel
Anonymous_LogEmail
CookieLog
Relatório gráfico de acesso ao sistema
Configurando o Apache como servidor proxy
Controlando o acesso ao servidor proxy
Redirecionamento de conexões no Apache
Virtual Hosts
Virtual hosts baseados em IP
Virtual hosts baseados em nome
Segurança no uso de IP's em Virtual Hosts
Uso de criptografia SSL
Servidor apache com suporte a ssl
Instalando o suporte a módulo SSL no Apache
Gerando um certificado digital
Exemplo de configuração do módulo mod-ssl
Autorizando acesso somente a conexões SSL
Iniciando o servidor Web com suporte a SSL
Exemplo comentado de um arquivo de configuração do Apache
httpd.conf
srm.conf
access.conf
Códigos HTTP

Esta capítulo documenta a configuração, personalização, introdução aos mecanismos de autenticação e controle de acesso do Apache, sistema proxy, virtual hosting, e exemplos de configuração do servidor httpd. Ele não tem como objetivo ser uma referência completa de configuração, mas sim abordar didaticamente o assunto.

Introdução

O servidor web é um programa responsável por disponibilizar páginas, fotos, ou qualquer outro tipo de objeto ao navegador do cliente. Ele também pode operar recebendo dados do cliente, processando e enviando o resultado para que o cliente possa tomar a ação desejada (como em aplicações CGI's, banco de dados web, preenchimento de formulários, etc).

O Apache é um servidor Web extremamente configurável, robusto e de alta performance desenvolvido por uma equipe de voluntários (conhecida como Apache Group) buscando criar um servidor web com muitas características e com código fonte disponível gratuitamente via Internet. Segundo a Netcraft (http://www.netcraft.com/), o Apache é mais usado que todos os outros servidores web do mundo juntos.

Este capítulo não tenta ser um guia completo ao Apache, mas tentará mostrar como sua estrutura é organizada, as diretivas principais de configuração, diretivas de segurança, virtual hosting, proxy, o uso de utilitários de gerenciamento do servidor, como personalizar algumas partes do servidor e programas úteis de terceiros para análise e diagnóstico do servidor web. Não deixe também de ver “Exemplo comentado de um arquivo de configuração do Apache” pois contém diretivas básicas de configuração comentadas e explicações interessante e faz parte do aprendizado.

Versão

É assumido que esteja usando a versão 1.3.22 do apache. As explicações contidas aqui podem funcionar para versões posteriores, mas é recomendável que leia a documentação sobre modificações no programa (changelog) em busca de mudanças que alterem o sentido das explicações fornecidas aqui.

Um resumo da História do Apache

O Apache tem como base o servidor web NCSA 1.3 (National Center of Supercomputing Applications), que foi desenvolvido por Rob McCool. Quando Rob deixou o NCSA, o desenvolvimento foi interrompido, assim muitos desenvolvedores buscaram personalizar sua própria versão do NCSA ou adicionar mais características para atender as suas necessidades. Neste momento começa a história do Apache com Brian Behlendorf e Cliff Skolnick abrindo uma lista de discussão para interessados no desenvolvimento, conseguindo espaço em um servidor doado pela HotWired e trocando patches corrigindo problemas, adicionando recursos e discutindo idéias com outros desenvolvedores e hackers interessados neste projeto.

A primeira versão oficial do Apache foi a 0.6.2, lançada em Abril de 1995 (neste período a NCSA retomava o desenvolvimento de seu servidor web, tendo como desenvolvedores Brandon Long e Beth Frank que também se tornaram membros especiais do grupo Apache, compartilhando idéias sobre seus projetos).

Nas versões 2.x do Apache, a escalabilidade do servidor foi ampliada suportando as plataformas Win32 (não obtendo o mesmo desempenho que em plataformas UNIX mas sendo melhorado gradativamente).

Enviando Correções/Contribuindo com o projeto

Um formulário está disponível na Web para o envio de correções/sugestões em http://www.apache.org/bug_report.html/. Uma lista de anuncio sobre o Apache está disponível em que divulgam correções, novas versões e realização de eventos.

Mais detalhes sobre o desenvolvimento do Apache podem ser visualizadas na URL http://dev.apache.org/.

Características do Apache

Abaixo estão algumas características que fazem esse servidor web o preferido entre os administradores de sistemas:

  • Possui suporte a scripts cgi usando linguagens como Perl, PHP, Shell Script, ASP, etc.

  • Suporte a autorização de acesso podendo ser especificadas restrições de acesso separadamente para cada endereço/arquivo/diretório acessado no servidor.

  • Autenticação requerendo um nome de usuário e senha válidos para acesso a alguma página/sub-diretório/arquivo (suportando criptografia via Crypto e MD5).

  • Negociação de conteúdo, permitindo a exibição da página Web no idioma requisitado pelo Cliente Navegador.

  • Suporte a tipos mime.

  • Personalização de logs.

  • Mensagens de erro.

  • Suporte a virtual hosting (é possível servir 2 ou mais páginas com endereços/ portas diferentes através do mesmo processo ou usar mais de um processo para controlar mais de um endereço).

  • Suporte a IP virtual hosting.

  • Suporte a name virtual hosting.

  • Suporte a servidor Proxy ftp e http, com limite de acesso, caching (todas flexivelmente configuráveis).

  • Suporte a proxy e redirecionamentos baseados em URLs para endereços Internos.

  • Suporte a criptografia via SSL,Certificados digitais

  • Módulos DSO (Dynamic Shared Objects) permitem adicionar/remover funcionalidades e recursos sem necessidade de recompilação do programa.

Ficha técnica

Pacote:

Utilitários:

  • apache - Servidor Web Principal

  • apachectl - Shell script que faz interface com o apache de forma mais amigável

  • apacheconfig - Script em Perl para configuração interativa básica do Apache

  • htpasswd - Cria/Gerencia senhas criptografadas Crypto/MD5

  • htdigest - Cria/Gerencia senhas criptografadas Crypto/MD5

  • dbmmanage - Cria/Gerencia senhas em formato DBM (Perl)

  • logresolve - Faz um DNS reverso dos arquivos de log do Apache para obter o endereço de hosts com base nos endereços IP's.

  • ab - Apache Benchmarcking - Ferramenta de medida de desempenho do servidor Web Apache.

Por padrão, os arquivos de configuração do Apache residem no diretório /etc/apache:

httpd.conf

Arquivo de configuração principal do Apache, possui diretivas que controlam a operação do daemon servidor. Um arquivo de configuração alternativo pode ser especificado através da opção "-f" da linha de comando.

srm.conf

Contém diretivas que controlam a especificação de documentos que o servidor oferece aos clientes. O nome desse arquivo pode ser substituído através da diretiva ResourceConfig no arquivo principal de configuração.

access.conf

Contém diretivas que controlam o acesso aos documentos. O nome desse arquivo pode ser substituído através da diretiva AccessConfig no arquivo principal de configuração.

O servidor Web lê os arquivos acima na ordem que estão especificados (httpd.conf, srm.conf e access.conf). As configurações também podem ser especificadas diretamente no arquivo httpd.conf. Note que não é obrigatório usar os arquivos srm.conf e access.conf, mas isto proporciona uma melhor organização das diretivas do servidor, principalmente quando se tem um grande conjunto de diretivas. Um exemplo comentado destes três arquivos de configuração é encontrado em “Exemplo comentado de um arquivo de configuração do Apache”.

Requerimentos

A máquina mínima para se rodar um servidor Apache para atender a uma rede padrão 10MB/s é um Pentium 90, 24MB de RAM, um HD com um bom desempenho e espaço em disco considerável de acordo com o tamanho projetado de seu servidor web (considerando seu crescimento).

Uma configuração mais rápida para redes 100MB/s teria como processador um Cyrix MX ou Intel Pentium MMX como plataforma mínima (Cyrix é o recomendado pelo alto desempenho no processamento de strings), barramento de HD SCSI com uma boa placa controladora (Adaptec 19160 ou superior) com 64MB de RAM no mínimo.

Arquivos de log criados pelo Apache

O servidor httpd grava seus arquivos de log geralmente em /var/log/apache, não é possível descrever os arquivos de logs usados porque tanto seus nomes como conteúdo podem ser personalizados no arquivo httpd.conf. Mesmo assim, os arquivos de logs encontrados na instalação padrão do Apache são os seguintes:

  • access.log - Registra detalhes sobre o acesso as páginas do servidor httpd.

  • error.log - Registra detalhes saber erros de acesso as páginas ou erros internos do servidor.

  • agent.log - Registra o nome do navegador do cliente (campo UserAgent do cabeçalho http).

Mais referências podem ser encontradas em “Sistema de Log do Apache”. Um bom programa para geração de estatísticas de acesso com gráficos é o “Relatório gráfico de acesso ao sistema”.

Instalação

apt-get install apache apache-doc

(o pacote contém a documentação de referencia do Apache, é recomendável instala-lo se estiver curioso e deseja entender melhor seu funcionamento ou consultar diretivas).

Iniciando o servidor/reiniciando/recarregando a configuração

O Apache pode ser executado tanto como um servidor Inetd ou como um Daemon. A inicialização de programas pelo Inetd é uma boa estratégia quando você precisa de um controle de acesso básico (o fornecido pelo tcpd), e o serviço é pouco usado na máquina.

A segurança de um serviço iniciado pelo inetd pode ser substituída e melhorada por um firewall bem configurado, garantindo facilidades extras como um relatório de tráfego para a porta do servidor web, por exemplo. Mesmo assim se o servidor Apache estiver rodando como daemon e estiver ocioso, ele será movido para swap liberando a memória RAM para a execução de outros programas.

Neste capítulo será assumido seu funcionamento do Apache como Daemon, que é o método de funcionamento recomendado para sites de grande tráfego onde ele é freqüentemente requisitado e considerado um serviço crítico.

O método padrão para iniciar programas como daemons na Debian é através dos diretórios /etc/rc?.d. Cada diretório deste contém os programas que serão executados/interrompidos no nível de execução "?" (rc1.d/, rc2.d/ ...). O conteúdo destes diretórios são links para os scripts originais em /etc/init.d/programa, o nosso programa alvo é /etc/init.d/apache. O /etc/init.d/apache aceita os seguintes parâmetros:

  • start - Inicia o Apache

  • stop - Finaliza o Apache

  • restart - Reinicia o Apache, efetuando uma pausa de 5 segundos entre a interrupção do seu funcionamento e reinicio.

  • reload - Recarrega os arquivos de configuração do Apache, as alterações entram em funcionamento imediatamente.

  • reload-modules - Recarrega os módulos. Basicamente é feito um restart no servidor.

  • force-reload - Faz a mesma função que o reload

Para reiniciar o Apache usando o /etc/init.d/apache, digite:

./etc/init.d/apache restart

ou

cd /etc/init.d;./apache restart

Na realidade, o que o /etc/init.d/apache faz é interagir diretamente com o shell script apachectl.

O apachectl recebe os parâmetros enviados pelo usuário e converte para sinais que serão enviados para o binário apache. Da mesma forma ele verifica os códigos de saída do apache e os transforma em mensagens de erro legíveis para o usuário comum. Os seguintes comandos são aceitos pelo apachectl:

  • httpd-server/start - Inicia o Apache

  • stop - Finaliza o Apache (enviando um sinal TERM)

  • restart - Reinicia o Apache (enviando um sinal HUP)

  • graceful - Recarrega os arquivos de configuração do Apache (enviando um sinal USR1)

  • fullstatus - Mostra o status completo do servidor Apache (requer o lynx e o módulo mod_status carregado).

  • status - Mostra o status do processo do servidor Apache (requer o lynx e o módulo mod_status carregado).

  • configtest - Verifica se a sintaxe dos arquivos de configuração está OK (executa um apache -t).

Opções de linha de comando

  • -D nome - define um nome que será usado na diretiva <IfDefine nome>.

  • -d diretório - especifica o diretório ServerRoot (substitui o do arquivo de configuração).

  • -f arquivo - especifica um arquivo ServerConfigFile alternativo.

  • -C "diretiva" - processa a diretiva antes de ler os arquivo de configuração.

  • -c "diretiva" - processa a diretiva depois de ler os arquivos de configuração.

  • -v - mostra a versão do programa.

  • -V - mostra opções usadas na compilação do Apache.

  • -h - Mostra o help on-line do programa

  • -l - lista módulos compilados junto com o Apache (embutidos)

  • -L - lista diretivas de configurações disponíveis

  • -S - Mostra configurações de Virtual Hosting

  • -t - executa a checagem de sintaxe nos arquivos de configuração do Apache (incluindo a checagem da diretiva DocRoot).

  • -T - executa a checagem de sintaxe nos arquivos de configuração do Apache (menos da diretiva DocRoot).