Como nasceu este guia

Na minha experiência enquanto consultor noto um comportamento curioso das pessoas que desenvolvem aplicações web: não raro sabem tudo a respeito do framework no qual desenvolvem seus projetos, mas muito pouco (quase nada) a respeito dos servidores responsáveis por executar suas aplicações. Este post inicia uma série na qual irei apresentar diversas funcionalidades do mais popular servidor HTTP, o Apache HTTP Server (HTTPD).

Escolhi o HTTPD não apenas pelo fato de ser o mais popular (ainda, pois o Nginx está ganhando bastante mercado), mas por que acho a documentação oficial muito ruim e não encontrei bons livros que pudessem me guiar. Sendo assim, dado que temos agora a Revista do /dev/All, por que não começar criando um guia do HTTPD? A ideia é lhe mostrar o básico para que não perca tempo lutando com o HTTPD e sim dominando-o.

Uma das impressões erradas que o pessoal costuma ter a respeito do Apache HTTP Server é que ele se aplica apenas ao desenvolvimento PHP, CGI (alguém ainda?), Perl ou Python ou conteúdo estático. Na realidade, se você desenvolve aplicações web, seja em qual linguagem for, HTTPD pode ser uma ferramenta salvadora. Eu, por exemplo, comecei a conhecê-lo melhor apenas depois que precisei instalar certificados SSL em minhas aplicações escritas em Java.

É importante lembrar que este é um guia vivo: caso encontre erros neste texto, por favor, me notifique nos comentários para que as devidas correções possam ser aplicadas. Como não sou propriamente uma pessoa de infraestrutura, minha visão é a de um desenvolvedor.

Pelo começo: o que é

O servidor Apache implementa os protocolos HTTP e HTTPS. Em sua versão mais enxuta, sem nenhum módulo instalado, serve “apenas” para transitar conteúdo estático nestes protocolos. Se você o instalar em uma máquina virgem, por exemplo, poderá inicialmente apenas servir conteúdo estático em HTML ou compartilhar arquivos usando os protocolos que acabo de mencionar.

Além disto também funciona como um servidor CGI (Common Gateway Interface), mas não falarei muito a respeito disto por enquanto. Meu objetivo neste post é apenas te mostrar o essencial para que mais à frente possamos aprender os recursos avançados que ele nos oferece no desenvolvimento de nossas aplicações web.

Nota sobre os nomes

O Apache HTTP Server pode se apresentar sob diferentes nomes: HTTPD, Servidor Apache, Apache HTTP Server, Apache. Essencialmente é tudo a mesma coisa.

Como instalar

Este guia é focado no ambiente Linux e leva em consideração a versão 2.4 do servidor, mas não fique triste: mais a frente vou mostrar como instalar no Windows de uma forma bem fácil. A instalação irá variar muito de acordo com a sua distribuição, mas em 90% dos casos você irá topar com o seguinte procedimento:

  • Atualize a lista de repositórios da sua distribuição (apt-get update ou yum update).
  • Execute a instalação do servidor Apache (apt-get install apache2 ou yum install apache2

Este procedimento toscamente apresentado irá instalar o setup mais simples possível do Apache. Você não conseguirá executar uma aplicação baseada em PHP, por exemplo, mas sim servir conteúdo estático. Testar a instalação é bastante simples: após ter executado o procedimento acima, verifique se o servidor está em execução com um dos comandos a seguir:

  • Execute o comando service apache2 status – se aparecer “apache2 is running”, ok.
  • Ou execute /etc/init.d/apache2 status – uma mensagem similar deverá ser exposta

Caso o servidor não esteja em execução, iniciá-lo é fácil:

  • service apache2 start ou
  • /etc/init.d/apache2 start

Em 90% das distribuições com que trabalhei isto foi suficiente para instalar a versão bruta do Apache e iniciá-lo. Para vê-lo funcionando abra seu navegador e digite o seguinte endereço: http://[ip do servidor] (normalmente http://localhost) – a página padrão do Apache será apresentada, tal como no exemplo a seguir, extraído do Ubuntu (esta página varia de acordo com a distribuição):

Como instalo no Windows?

A forma mais fácil que conheço é usando o XAMPP, que pode ser baixado em http://apachefriends.org. O XAMPP é uma distribuição do servidor que vêm com tudo o que você precisa para programar em PHP ou Perl. Super simples de instalar: basta seguir o instalador no formato “next next next” que, no final, será incluído um ícone na bandeja do Windows para que você possa iniciar os serviços necessários.

Nem há muito o que explicar, é realmente simples assim. 🙂

Entendendo as configurações

O principal arquivo de configuração do Apache é o apache2.conf (ou httpd.conf) que, na esmagadora maioria das vezes, encontra-se no diretório /etc/apache2 do Linux. Listando o conteúdo deste diretório normalmente topamos com uma estrutura de arquivos e pastas similar à apresentada a seguir:

Isto por que normalmente não incluímos todas as configurações em um único arquivo: para facilitar a administração dividimos as configurações em diversos arquivos. Primeiro vejamos o que estas pastas podem significar:

  • Em confs-available, por exemplo, colocamos algumas configurações gerais
  • confs-enabled – quais as configurações que habilitamos no Apache
  • mods-available – os módulos do Apache disponibilizados em nossa instalação – módulos nos possibilitam ter funcionalidades adicionais no servidor tais como, por exemplo, a possibilidade de termos conteúdo dinâmico gerado por PHP, Perl, Python, etc.
  • mods-enabled – quais os módulos que habilitamos no Apache.
  • sites-available – uma mesma instalação do Apache pode gerenciar mais de um site, é o famigerado Virtual Host, que veremos mais à frente neste guia.
  • sites-enabled – quais os sites que habilitamos

Mas neste momento o que realmente nos interessa é o arquivo principal, o apache2.conf (ou httpd.conf) e a sua sintaxe.

A sintaxe da configuração: diretivas e escopos

Ao abrir o arquivo apache2.conf  (ou httpd.conf) você se depara com conteúdo similar ao exposto a seguir:

Parece um tipo engraçado de HTML/XML, mas não é. E é aí que começam as confusões na administração do servidor. As pessoas simplesmente não sabem qual a sintaxe destes arquivos.

Estas tags definem escopos de configuração. No exemplo acima o que estiver dentro das tags <Directory /> e </Directory>, por exemplo, são as configurações que aplicamos apenas dentro daquele diretório que é servidor pelo Apache. Há outros exemplos de definição de escopos de configuração que veremos durante este guia. Neste primeiro momento você apenas precisa saber que escopos existem, não seu significado.

O que você deve ter em mente é o conceito de diretiva. Uma diretiva define um aspecto de configuração do Apache e sempre possui a seguinte sintaxe:

Nome_da_diretiva [parametros].

Vamos a alguns exemplos de configurações do Apache

Listen 80

A diretiva Listen especifica quais as portas que o servidor deverá trabalhar. Neste exemplo, dizemos que a porta usada será a 80 (padrão do HTTP).

LogFormat "%{User-agent}i" agent

A diretiva LogFormat define o formato do arquivo de log e recebe dois argumentos: uma string representando of ormato do log e, no segundo ponto, qual atributo da requisição HTTP que deveŕa ser incluído no resultado.

Há momentos nos quais uma diretiva pode ser bastante longa: nestes casos é interessante que possa ser lida em mais de uma linha. Fazemos isto incluindo o caractere \ no final da linha.

Você também pode incluir comentários nos seus arquivos de configuração. Basta que a linha inicie com o caractere #, tal como no exemplo a seguir:

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

Dica: por padrão todos os arquivos de configuração do Apache são muito bem documentados, de tal modo que você pode aprender facilmente o que uma configuração significa bastando para isto ler os comentários.

E para finalizar, uma regra geral sobre o escopo:

  • Se a diretiva está no corpo principal do arquivo (fora de tags), são configurações que se aplicam a todo o comportamento do servidor Apache.
  • Se a diretiva está dentro de uma tag, só se aplica naquele escopo. E se houver em seu interior uma configuração que aparece do lado de fora, a configuração presente no interior da tag é que será levada em consideração.

Você pode encontrar a lista completa de diretivas padrão do Apache 2.4 neste link.

Usando variáveis de ambiente ou criando as suas

Você pode incluir variáveis de ambiente na configuração. Nos arquivos de configuração você poderá encontrar trechos similares ao exposto a seguir:

Listen ${PORTA}

O que estiver entre ${ e } denota uma variável de ambiente, no caso, uma chamada PORTA. Você também pode definir variáveis de ambiente dentro do próprio arquivo de configuração do servidor usando a diretiva Define, tal como no exemplo a seguir:

Define PORTA 80

O primeiro parâmetro identifica o nome da variável, e o segundo, seu valor. Se uma variável for definida no interior de um arquivo de configuração, e já existir uma variável de ambiente de mesmo nome, àquela definida no arquivo de configuração terá prioridade.

Injetando arquivos de configuração

Lembra no início desta seção quando mencionei que você pode organizar suas configurações do servidor Apache em múltiplos arquivos para facilitar a manutenção? Você o faz com a diretiva Include, tal como no exemplo a seguir:

Include arquivo.conf

O parâmetro passado para a diretiva pode ser o nome de um arquivo específico ou usando caracteres curinga, tal como no exemplo a seguir:

# Inclui todos os arquivos na pasta arquivos
Include arquivos/*

Caso o parâmetro passado aponte para arquivos que não exista, o Apache não será iniciado e um erro será disparado. No entanto, há arquivos que podem não existir. Neste caso, usamos a diretiva IncludeOptional, que possui a mesma sintaxe que Include. A diferença é que não irá impedir a inicialização do Apache caso nenhum arquivo seja encontrado.

# Vou iniciar o Apache mesmo que o arquivo não exista
IncludeOptional arquivoInexistente.conf

Aplicando as configurações

Então você modificou as configurações e quer agora ver o resultado final das suas mudanças, certo? É necessário reiniciar o Apache. Basta usar um dos comandos a seguir:

  • service apache2 restart – Ubuntu
  • systemctl restart apache2 – Fedora, RedHat e derivados

Caso haja algum erro nas suas configurações, o Apache não será inicializado. Mas talvez você queira evitar problemas de downtime caso tenha digitado incorretamente suas configurações testando suas configurações. Como fazer isto? Testando-as com o comando a seguir:

apachectl configtest

Caso existam erros na sua configuração você será notificado e poderá arrumá-los, evitando aborrecimentos.

Resumo

Nesta primeira parte do nosso guia definimos as bases para que possamos prosseguir. Você aprendeu a:

  • Instalar o Apache (de uma forma bastante rudimentar)
  • Como iniciar e reiniciar o servidor.
  • Como as configurações são organizadas e qual a sua sintaxe.
  • Como aplicar mudanças de configurações no servidor.
  • Finalmente, como verificar se suas configurações estão corretas.

Agora que você já sabe como ler os arquivos de configuração chegou a hora de escreve-los. Te aguardo no próximo post!

Desenvolvedor e co-fundador da itexto, do /dev/All, Groovy e Grails Brasil, Spring Brasil e JavaScript Brasil.
Desenvolvendo software desde o século passado e escrevendo a respeito no /dev/Kico

2 thoughts on “Apache HTTP Server para devs – Introdução

  1. Boa Noite ,
    Primeiramente gostaria de agredecer pelos posts, estou gostando bastante!!!

    Não ficou muito claro para min o seguinte trecho da regras de escopos:

    “E se houver em seu interior uma configuração que aparece do lado de fora, a configuração presente no interior da tag é que será levada em consideração.”

    pode me ajudar?

    Att;

Leave comment

Your email address will not be published. Required fields are marked with *.

%d blogueiros gostam disto: