Apache HTTP Server para desenvolvedores – Introdução
Como nasceu este guia
Na minha experiência enquanto consultor noto um comportamento curioso das pessoas que desenvolvem aplicações web: normalmente 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 ainda bastante utilizado, mas por que acho a documentação oficial muito ruim e não encontrei bons livros que pudessem me guiar. Sendo assim, 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 aprofundaremos muito no assunto por enquanto. O nosso 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, porém, abordaremos a instalação no Windows de uma forma bem fácil mais adiante.. A instalação variará de acordo com a sua distribuição, mas maioria dos casos você fará 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 simples procedimento irá instalar o setup mais básico do Apache. Em um primeiro momento você não conseguirá executar uma aplicação baseada em PHP, por exemplo, mas sim servir conteúdo estático. Para testar a instalação é bastante simples: após ter executado a atualização de repositórios e executado a instalação do Apache, verifique se o servidor está em funcionamento com um dos comandos a seguir:
- service apache2 status – caso apareça “apache2 is running”, sua instalação foi concluída com êxito;
- Ou execute /etc/init.d/apache2 status – e uma mensagem similar ao do comando anterior deverá ser apresentada.
Caso o servidor não esteja em execução, para iniciá-lo é fácil:
- service apache2 start ou
- /etc/init.d/apache2 start.
Na maioria 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 apresentado na http://[ip do servidor] , extraído do Ubuntu (esta página varia de acordo com a distribuição):
Como instalar 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. Bastante simples de instalar: basta seguir o instalador clicando next que, no final, será incluído um ícone no menu iniciar do Windows para que você possa executar os serviços necessários.
Simples assim. 🙂
Entendendo as configurações
O principal arquivo de configuração do Apache é o apache2.conf (ou httpd.conf) que, na maioria das vezes, encontra-se no diretório /etc/apache2 do Linux. Acessando o conteúdo deste diretório, normalmente é encontrado uma estrutura de arquivos e pastas similar à apresentada na figura 2:
Importante salientar que, as configurações não estão presentes em um único arquivo: a fim de simplificar a administração das configurações, estas estão divididas em vários arquivos. Primeiro vejamos o significado destas pastas:
- Em conf-available, por exemplo, é alocado algumas configurações gerais;
- conf-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: a possibilidade de termos conteúdo dinâmico gerado por PHP, Perl, Python, etc;
- mods-enabled – quais módulos habilitados no Apache;
- sites-available – responsável por fazer o gerenciamento de mais de um site, conhecido como Virtual Host, tópico que abordaremos à frente neste guia;
- sites-enabled – quais os sites que habilitamos.
Por enquanto, 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ê encontrará com o conteúdo similar ao da figura 3:
Ao analisar o arquivo da figura 3, é comum assemelhar com 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 da figura 3 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 é importante saber que escopos existem, sem necessariamente saber seu significado.
É suma importância 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].
Vejamos 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 o formato 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:
#
# 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 as criando
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
Recorda-se do momento em que mencionei, no início desta seção, a possibilidade de organizar as configurações do servidor Apache em múltiplos arquivos, visando facilitar a manutenção? Você pode fazer utilizando 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 curingas, 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
Após realizarmos as devidas modificações, é necessário reiniciar o Apache para que possamos observar as alterações aplicadas.. 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. No entanto, é possível que você queira evitar problemas de downtime caso tenha digitado incorretamente suas configurações ao realizar testes. 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 dores de cabeça.
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. Nos vemos no próximo post!
PS
Este post foi originalmente publicado na Revista do /dev/All. Recentemente decidimos revisar este guia e publicá-lo em sua íntegra, aos poucos, aqui no blog da itexto. Espero que lhes seja útil!