HTTPD - Servidor Web Apache2

O Apache é o Servidor Web mais utilizado em sistemas Linux. Servidores Web são utilizados para servir Páginas Web solicitadas por computadores clientes. Os clientes normalmente solicitam e visualizam Páginas Web usando Navegadores Web como Firefox, Opera ou Mozilla.

Os usuários inserem um Localizador Uniforme de Recursos (URL, do inglês 'Uniform Resource Locator') para apontar para o servidor Web através do seu Nome de Domínio Plenamente Qualificado (FQDN, do inglês 'Fully Qualified Domain Name') e o caminho para o recurso necessário. Por exemplo, para ver a página inicial do web site do Ubuntu um usuário irá inserir apenas o FQDN. Para pedir informações específicas sobre suporte pago, um usuário irá inserir o FQDN seguido por um caminho.

O protocolo mais comum usado para transferir páginas de internet é o Hyper Text Transfer Protocol (HTTP - Protocolo de transferência de hipertexto). Protocolos como Hyper Text Transfer Protocol over Secure Sockets Layer (HTTPS - Protocolo seguro de transferência de hipertexto) e File Transfer Protocol (FTP - Protocolo de transferência de arquivo), um protocolo para enviar e receber arquivos, são também suportados.

Servidores Web Apache são geralmente utilizados em conjunto com o motor de banco de dados MySQL, a linguagem de de construção de scripts pré-processadora de hiper-texto (PHP), e outras linguagens de construção de scripts populares como o Python e o Perl. Essa configuração é denominada LAMP (Linux, Apache, MySQL e Perl/Python/PHP) e dá forma a uma poderosa e robusta plataforma de desenvolvimento e hospedagem de aplicações basedas na web.

Instalação

O servidor web Apache2 está disponível no Ubuntu Linux. Para instalar o Apache2:

  • Em um terminal digite o comando:

    sudo apt-get install apache2
    

Configuração

Apache2 é configurado para colocar as diretivas em arquivos de configuração em formato de texto plano. Os arquivos de configuração são separados entre arquivos e diretórios:

  • apache2.conf: o arquivo de configuração principal do Apache2. Contém configurações que são globais para o Apache2.

  • conf.d: contém arquivos de configurações que se aplicam globalmente ao Apache. Outros pacotes Other packages que utilizam o Apache2 para servir conteúdos pode adicionar arquivos, ou links simbólicos, para este diretório.

  • envvars: arquivo onde váriaveis de ambiente do Apache2 são setadas.

  • httpd.conf: historicamente o arquivo principal de configuração do Apache2, nomeado após o daemon httpd. O arquivo pode ser utilizado para configuração de opções específicas do usuário que afetam globalmente o Apache2.

  • mods-available: este diretório contém arquivos de configuração tanto para carregar modules quanto para configura-los. No entanto, nem todos os módulos terão arquivos de configuração específicos.

  • mods-enabled: contém links simbólicos para os arquivos em /etc/apache2/mods-available. Quando um arquivo de configuração de módulo é linkado simbólicamente será ativado na próxima vez que o apache2 for reiniciado.

  • ports.conf: mantém as diretivas que determimam quais portas TCP o Apache2 estará escutando.

  • sites-available: este diretório tem os arquivos de configuração para Hosts Virtuais Apache. Hosts Virtuais permitem que o Apache2 seja configurado para múltiplos sites com configurações separadas.

  • sites-enabled: como o mods-enabled, sites-enabled contém links simbólicos para o diretório/etc/apache2/sites-available. Similarmente, quando um arquivo de configuração em sites-available é linkado simbólicamente será ativado na próxima vez que o Apache2 for reiniciado.

Além disso, outros arquivos de configuração podem ser adicionados usando a diretiva Include, e coringas podem ser usados para incluir vários arquivos de configuração. Qualquer diretiva pode ser colocada em qualquer um destes arquivos de configuração. Alterações nos principais arquivos de configuração somente são reconhecidas pelo Apache2 quando ele for iniciado ou reiniciado.

O servidor também lê um arquivo contendo tipos de documentos mime; o nome do arquivo é definido pela diretiva TypesConfig, e está em /etc/mime.types por padrão.

Configurações Básicas

Esta seção explica as configurações de parâmetros essenciais do servidor Apache2. Para maiores detalhes veja a documentação do Apache2.

  • O Apache2 é distribuído com uma configuração padrão de servidor-virtual-amigável. Ou seja, ele está configurado com um único padrão de servidor virtual (usando a diretiva VirtualHost) que pode ser modificado ou não, caso você tenha um único site, ou utilizá-lo como um modelo para outros servidores virtuais caso tenha vários sites. Se não for modificado, o servidor virtual padrão servirá como seu site padrão, ou o site que os usuários verão se o URL que for digitado não corresponder à diretiva ServerNameemphasis> de qualquer um dos seus sites personalizados. Para modificar o servidor virtual padr/etc/apache2/sites-available/default.

    [Nota]

    As diretivas para um host virtual somente são aplicadas para um host virtual em particular. Se a diretiva é configurada para escopo de servidor e não definida dentro das configurações de um virtual host, as configurações padrão serão usadas. Por exempĺo, você pode definir o e-mail do Webmaster e não definir um e-mail individual para cada virtual host.

    Se você deseja configurar um novo virtual host ou site, copie esse arquivo para o mesmo diretório com o nome que você escolher. Por exemplo:

    sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/novosite
    

    Edite o novo arquivo para configurar o novo site utilizando algumas das diretivas descritas abaixo.

  • A diretiva ServerAdmin especifica o endereço de e-mail a ser anunciado como do administrador do servidor. O valor padrão é webmaster@localhost. Ele deve ser alterado para um endereço de e-mail que seja entregue para você (caso você seja o administrador do servidor). Se seu website possuir um problema, o Apache2 mostrará uma mensagem de erro contendo este endereço de e-mail para qual o problema poderá ser relatado. Encontre esta diretiva no arquivo de configuração do site em /etc/apache2/sites-available.

  • A diretiva Listen especifica a porta, e opcionalmente o endereço IP, na qual o Apache2 irá escutar. Se o endereço IP não for especificado, o Apache2 irá escutar em todos os endereços IP designados para a máquina no qual ele esteja rodando. O valor padrão para a diretiva Listen é 80. Altere isso para 127.0.0.1:80 para fazer com que o Apache apenas escute apenas na sua interface de loopback, de forma que ele esteja disponível para a Internet, para (por exemplo) 81 para mudar a porta no qual ele escuta, ou deixe o valor como está para operação normal. Esta diretiva pode ser encontrada e alterada em seu próprio arquivo, /etc/apache2/ports.conf

  • A diretiva ServerName é opcional e especifica para qual FQDN seu site deve responder. O servidor virtual padrão não tem uma diretiva ServerName especificada, pela qual irá responder a todas as solicitações que não coincidirem com uma diretiva ServerName de outro servidor virtual. Se você adquiriu o nome de domínio ubunturocks.com e deseja hospedá-lo em seu servidor Ubuntu, o valor da diretiva ServerName no seu arquivo de configuração do servidor virtual deverá ser ubunturocks.com. Adicione esta diretiva ao novo arquivo do servidor virtual que você já havia criado (/etc/apache2/sites-available/meunovosite).

    Você também pode desejar que o seu site responda para www.ubunturocks.com, uma vez que muitos utilizadores irão assumir que o prefixo www é apropriado. A diretiva ServerAlias para isto. Você também pode utilizar curingas na diretiva ServerAlias.

    Por exemplo, a seguinte configuração fará com que seu site responda a qualquer pedido que termine no domínio .ubunturocks.com.

    ServerAlias *.ubunturocks.com
    
  • A diretiva DocumentRoot especifica onde o Apache deve procurar pelos arquivos que formam o site. O valor padrão é /var/www. Nenhum site está configurado lá, mas você pode descomentar a diretiva RedirectMatch em /etc/apache2/apache2.conf as requisições serão redirecionadas para /var/www/apache2-default onde o site padrão do Apache2 aguarda. Altere este valor no arquivo de host virtual do seu site e lembre-se de criar aquele diretório se necessário!

O diretório /etc/apache2/sites-available não analisado pelo Apache2. Links simbólicos em /etc/apache2/sites-enabled apontam para sites "disponíveis".

Ative o novo Host Virtual usando o utilitário a2ensite e reiniciando o Apache:

sudo a2ensite novosite
sudo /etc/init.d/apache2 restart
[Nota]

Certifique-se de substituir novosite para um nome mais descritivo para o Host Virtual. Um método é o nome do arquivo após a diretiva ServerName do Host Virtual.

Similarmente, utilize o utilitário a2dissite para desabilitar sites. Isto pode ser útil quando se está solucionando problemas de configuração de múltiplos Hosts Virtuais:

sudo a2dissite novosite
sudo /etc/init.d/apache2 restart

Configuração Padrão

Esta seção explica a configuração das definições padrão do servidor Apache2. Por exemplo, se você adicionar um host virtual, as definições que você configurar para o host virtual têm precedência para aquele host virtual. Para uma diretiva não definida dentro da definição de host virtual, o valor padrão é utilizado.

  • O DirectoryIndex é a página padrão servida pelo servidor quando o usuário requisita um índice de um diretório especificando uma barra (/) no final do nome do diretório.

    Por exemplo, quando um usuário solicita a página http://www.examplo.com/este_diretório/, ele ou ela vai ver: o DirectoryIndex (DiretórioÍndice) se ele existir; uma lista do diretório gerado pelo servidor caso não exista e as opções de índices estiverem especificadas; ou uma página de Permissão Negada se nenhuma das duas opções forem verdadeiras. O servidor irá tentar encontrar um dos arquivos listados no DirectoryIndex e irá retornar o primeiro que for encontrado. Se ele não encontrar nenhum destes arquivos e se as Opções de Índices estiver ajustadas para aquele diretório, o servidor irá gerar e retornar uma lista, no formato HTML, dos subdiretórios e arquivos no diretório. O valor padrão, encontrado em /etc/apache2/apache2.conf é "index.html index.cgi index.pl index.php index.xhtml". Portanto, se o Apache2 encontras um arquivo no diretório solicitado que bate com um destes nomes, o primeiro será mostrado.

  • A diretiva ErrorDocument permite que você especifique um arquivo para Apache usar em eventos específicos de erro. Por exemplo, se um usuário requisitar um recurso que não existe, um erro 404 irá ocorrer, pela configuração padrão do Apache2, o arquivo /usr/share/apache2/error/HTTP_NOT_FOUND.html.var será mostrado. Esse arquivo não está no DocumentRoot do servidor, mas existe uma diretiva Alias em /etc/apache2/apache2.conf que redireciona as requisições para o diretório /error para /usr/share/apache2/error/.

    Para ver uma lista das diretivas ErrorDocument padrão, utilize este comando:

    grep ErrorDocument /etc/apache2/apache2.conf
    
  • Por padrão, o servidor grava o log de transferência no arquivo /var/log/apache2/access.log. Você pode alterar isso para cada site nos arquivos de configuração dos seus hosts virtuais com a diretiva CustomLog, ou omiti-la para aceitar o padrão, especificado no /etc/apache2/apache2.conf. Você também pode especificar o arquivo no qual os erros serão registrados, através da diretiva ErrorLog, para a qual o padrão é /var/log/apache2/error.log. Estes são mantidos separados dos logs de transferência para ajudar na solução de problemas com seu servidor Apache2. Você também pode especificar o LogLevel (o valor padrão é "warn") e o LogFormat (consulte o /etc/apache2/apache2.conf para o valor padrão).

  • Algumas opções são especificadas em uma base por diretório, e não por servidor. Options é uma dessas diretivas. Uma instância Directory está delimitado por tags semelhantes ao formato XML, assim:

    <Directory /var/www/novosite>
    ...
    </Directory>
    

    A diretiva Options, dentro de uma instância Directory, aceita um ou mais dos seguintes valores (dentre outros), separados por espaços:

    • ExecCGI - Permite execução de scripts CGI. Scripts CGI não são executados se esta opção não estiver habilitada.

      [Dica]

      A maioria dos arquivos não devem ser executados como scripts CGI. Isto pode ser bastante perigoso. Scripts CGI devem ser mantidos em um diretório separado e fora de seu DocumentRoot, e somente este diretório deve ter a opção ExecCGI setada. Isto é o padrão, e a localização padrão para os scripts CGI é /usr/lib/cgi-bin.

    • Inclusões - Permitir inclusões no lado do servidor. O lado do servidor abrange permitir que um arquivo HTML inclua outros arquivos. Esta não é uma opção comum. Veja o guia do SSI em Apache2 para mais informações.

    • IncludesNOEXEC - Permite inclusão pelo lado do servidor, mas desabilita os comandos #exec e #include nos scripts CGI.

    • Índices - Exibe uma lista formatada dos conteúdos dos diretórios, se não houver Diretório índice (como index.html) existe no diretório solicitado.

      [Cuidado]

      Por motivos de segurança, isto geralmente não deveria estar habilitado, e certamente não deveria estar habilitado no seu diretório DocumentRoot. Habilite esta opção com cuidado, diretório por diretório somente se você tem certeza de que quer que os usuários vejam o conteúdo inteiro do diretório.

    • Multivisão - Suporta multivisões de negociação de conteúdo; esta opção é desabilitada por padrão por razões de segurança. Veja a documentação do Apache2 sobre esta opção.

    • SymLinksIfOwnerMatch - Somente segue os links simbólicos caso o arquivo alvo ou diretório seja do mesmo dono que o link.

Configurações httpd

Esta seção explica algumas propriedades básicas da configuração de daemons httpd.

LockFile - A diretiva LockFile define o caminho do arquivo de trava usado quando o servidor é compilado tanto com USE_FCNTL_SERIALIZED_ACCEPT quanto com USE_FLOCK_SERIALIZED_ACCEPT. É obrigatório armazená-lo no disco local. Deixe o valor padrão a menos que o diretório de logs esteja localizando em um compartilhamento NFS. Se este for o caso, o valor padrão deverá ser alterado para um caminho no disco local e para um diretório no qual apenas o root tem permissões de leitura.

PidFile - A diretiva PidFile define o arquivo em que o servidor gravará o seu ID de processo (pid). Este arquivo deve ser permissões de leitura somente para o root. Na maioria dos casos, o valor padrão deve ser deixado.

User - A diretiva User seta o UserID usado pelo servidor para responder as solicitações. Esta opção determina o acesso ao servidor. Qualquer arquivo inacessível a este usuário será também inacessível aos visitantes do seu website. O valor padrão para o User é www-data

[Atenção]

A não ser que você saiba exatamente o que está fazendo, não defina a diretiva User para root. Usando o root como User (usuário) você irá criar largas brechas de segurança para seu ser servidor Web.

A diretiva Group é similar a diretiva User. Group define o grupo que o servidor irá responder as solicitações. O grupo padrão é www-data.

Módulos do Apache

O Apache é um servidor que trabalha com módulos. Isto implica que apenas as mais básicas funcionalidades estão incluídas no núcleo do servidor. Extensões e recursos estão disponíveis através de módulos que podem ser carregadas em Apache. Por padrão, um conjunto básico de módulos está incluído no servidor pré-compilado. Se o servidor é compilado para usar módulos carregados dinamicamente, então os módulos podem ser compilados separadamente, e adicionados a qualquer momento utilizando a directiva LoadModule. Caso contrário, o Apache deve ser recompilado para adicionar ou remover módulos.

O Ubuntu compila o Apache2 de forma a permitir que o carregamento dinâmico de módulos. Diretivas de configuração podem ser condicionalmente incluídas na presença de algum módulo especial pela declaração deles entre um <IfModule> bloco.

Você pode instalar módulos adicionais Apache2 e usá-las com o seu servidor web. Por exemplo, execute o seguinte comando a partir de um terminal para instalar o módulo de Autenticação MySQLemphasis> :

sudo apt-get install libapache2-mod-auth-mysql

Veja o diretório /etc/apache2/mods-available, para módulos adicionais.

Use o utilitário a2enmod para habilitar um módulo:

sudo a2enmod auth_mysql
sudo /etc/init.d/apache2 restart

Similarmente, a2dismod para desabilitar um módulo:

sudo a2dismod auth_mysql
sudo /etc/init.d/apache2 restart

Configurações HTTPS

O módulo mod_ssl agrega uma característica importante ao servidor Apache2 - a habilidade de encriptar comunicações. Assim, quando seu navegador está comunicando usando SSL, usa-se o prefixo https:// no começo da URL na barra de navegação do navegador.

O módulo mod_ssl está disponível no pacote apache2-common. Execute o seguinte comando em um terminal para ativar o módulo <appplication>mod_ssl:</appplication>

sudo a2enmod ssl

Há um arquivo de configuração HTTPS padrão em /etc/apache2/sites-available/default-ssl. Para que Apache possa fornecer HTTPS, também são necessários arquivos certificado e chave. A configuração padrão de HTTPS irá utilizar um certificado e uma chave gerados pelo pacote ssl-cert. Eles são bons para testes, mas o certificado e chave automaticamente gerados devem ser substituídos por um certificado específico do sítio ou servidor. Para mais informações sobre geração de chaves e obtenção de certificados veja “Certificados”

Para configurar Apache para HTTPS, digite o seguinte:

sudo a2ensite default-ssl
[Nota]

Os diretórios /etc/ssl/certs e /etc/ssl/private são caminhos padrão. Se você instalar o certificado e chave em outro diretório, certifique-se em alterar SSLCertificateFile e SSLCertificateKeyFile apropriadamente.

Com Apache agora configurado para HTTPS, reinicie o serviço para ativar as novas configurações:

sudo /etc/init.d/apache2 restart
[Nota]

Dependendo de como você tenha obtido seu certificado você pode precisar entrar com uma frase secreta quando o Apache iniciar.

Você pode acessar as páginas seguras do servidor digitando https://your_hostname/url/ na barra de endereços do browser.

Referências

  • Documentação do Apache2 contém informações detalhadas sobre a configuração Apache2 directivas. Além disso, veja o pacote apache2-doc para os oficiais documentos do Apache2.

  • Veja o site Documentação Mod SSL para mais informações relacionadas a SSL.

  • O'Reilly's Apache Cookbook é um bom recurso para realizar configurações específicas no Apache2.

  • Para questões do Apache2 específicas ao Ubuntu, pergunte no canal de IRC #ubuntu-server na freenode.net.