29.8. Servidor HTTP Apache

Contribuido por Murray Stokely.

O open source Apache HTTP Server é o servidor Web mais utilizado. O FreeBSD não instala este servidor web por padrão, mas ele pode ser instalado a partir do pacote ou Port www/apache24.

Esta seção resume como configurar e iniciar a versão 2.x do Servidor HTTP Apache no FreeBSD. Para informações mais detalhadas sobre o Apache2.X e suas diretivas de configuração, consulte httpd.apache.org.

29.8.1. Configurando e Iniciando o Apache

No FreeBSD, o arquivo de configuração principal do Apache HTTP Server é instalado como /usr/local/etc/apache2x/httpd.conf, onde x representa o número da versão. Este arquivo ASCII de texto inicia as linhas de comentário com um #. As diretivas modificadas com mais freqüência são:

ServerRoot "/usr/local"

Especifica a hierarquia de diretório padrão para a instalação do Apache. Os binários são armazenados nos subdiretórios bin e sbin da raiz do servidor e os arquivos de configuração são armazenados no subdiretório etc/apache2x.

ServerAdmin you@example.com

Altere isso para seu endereço de e-mail para receber problemas com o servidor. Esse endereço também aparece em algumas páginas geradas pelo servidor, como documentos de erro.

ServerName www.example.com:80

Permite que um administrador defina um nome de host que é enviado de volta aos clientes pelo servidor. Por exemplo, www pode ser usado em vez do nome do host real. Se o sistema não tiver um nome registrado no DNS, insira seu endereço IP. Se o servidor irá escutar em um relatório alternativo, altere a porta 80 para o número de porta alternativa.

DocumentRoot "/usr/local/www/apache2x/data"

O diretório no qual os documentos serão exibidos. Por padrão, todas as solicitações são obtidas desse diretório, mas os links e aliases simbólicos podem ser usados para apontar para outros locais.

É sempre uma boa ideia fazer uma cópia de backup do arquivo de configuração do Apache padrão antes de fazer alterações. Quando a configuração do Apache estiver concluída, salve o arquivo e verifique a configuração usando o apachectl. A execução do apachectl configtest deve retornar Syntax OK.

Para iniciar o Apache na inicialização do sistema, adicione a seguinte linha ao /etc/rc.conf:

apache24_enable="YES"

Se o Apache deve ser iniciado com opções não-padrão, a seguinte linha pode ser adicionada ao /etc/rc.conf para especificar os flags necessários:

apache24_flags=""

Se o apachectl não relatar erros de configuração, inicie o httpd agora:

# service apache24 start

O serviço httpd pode ser testado inserindo http://localhost em um navegador da Web, substituindo localhost pelo nome de domínio totalmente qualificado da máquina que está executando o httpd. A página padrão da Web exibida é /usr/local/www/apache24/data/index.html.

A configuração do Apache pode ser testada quanto a erros depois de fazer alterações subsequentes de configuração enquanto o httpd está em execução usando o seguinte comando:

# service apache24 configtest

Nota:

É importante notar que o configtest não é um padrão rc(8) e não se espera que funcione para todos os scripts de inicialização.

29.8.2. Hospedagem Virtual

A hospedagem virtual permite que vários sites sejam executados em um servidor Apache. Os hosts virtuais podem ser baseados em IP ou baseados em nome. A hospedagem virtual baseada em IP usa um endereço IP diferente para cada site. A hospedagem virtual baseada em nome usa os cabeçalhos HTTP/1.1 do cliente para descobrir o nome do host, o que permite que os sites compartilhem o mesmo endereço de IP.

Para configurar o Apache para usar hospedagem virtual baseada em nome, adicione um bloco VirtualHost para cada site. Por exemplo, para o servidor Web denominado www.domain.tld com um domínio virtual de www.someotherdomain.tld, adicione as seguintes entradas ao arquivo httpd.conf:

<VirtualHost *>
    ServerName www.domain.tld
    DocumentRoot /www/domain.tld
</VirtualHost>

<VirtualHost *>
    ServerName www.someotherdomain.tld
    DocumentRoot /www/someotherdomain.tld
</VirtualHost>

Para cada host virtual, substitua os valores de ServerName e DocumentRoot pelos valores a serem usados.

Para obter mais informações sobre como configurar hosts virtuais, consulte a documentação oficial do Apache em: http://httpd.apache.org/docs/vhosts/.

29.8.3. Módulos Apache

O Apache usa módulos para aumentar a funcionalidade fornecida pelo servidor básico. Consulte o http://httpd.apache.org/docs/current/mod/ para uma lista completa e detalhes de configuração para os módulos disponíveis.

No FreeBSD, alguns módulos podem ser compilados com o port www/apache24. Digite make config dentro do diretório /usr/ports/www/apache24 para ver quais módulos estão disponíveis e quais estão ativados por padrão. Se o módulo não é compilado com o port, a Coleção de Ports do FreeBSD fornece uma maneira fácil de instalar vários módulos. Esta seção descreve três dos módulos mais usados.

29.8.3.1. Suporte SSL

Em algum momento, o suporte para o SSL dentro do Apache requer um modulo secundário chamado mod_ssl. Esse não é mais o casoe a instalação padrão do Apache vem com SSL embutido no servidor web. Um exemplo de como habilitar o suporte para paginas com SSL está disponível no arquivo http-ssl.conf instalado dentro do diretório /usr/local/etc/apache24/extra. Dentro desse diretório também esta um exemplo do arquivo chamado ssl.conf-sample. É recomendado que ambos arquivos sejam avaliados para configurar apropriadamente páginas seguras no servidor web Apache.

Depois da configuração do SSL estiver completa, deve ser removido o comentário da linha seguinte no arquivo http.conf principal para ativar as mudanças no próximo restart ou reload do Apache:

#Include etc/apache24/extra/httpd-ssl.conf

Atenção:

Versão dois do SSL e a versão três tem problemas de vulnerabilidades conhecidas. É altamente recomendado a versão 1.2 do TLS e 1.3 deve ser habilitada no lugar das velhas opções do SSL. Isso pode ser realizado configurando as seguintes opções no arquivo ssl.conf:

SSLProtocol all -SSLv3 -SSLv2 +TLSv1.2 +TLSv1.3
SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Para completar a configuração do SSL no servidor web, remova os comentários da seguinte linha para garantir que a configuração irá ser enviada para dentro do Apache durante o restart ou reload:

# Secure (SSL/TLS) connections
Include etc/apache24/extra/httpd-ssl.conf

As linhas a seguir também devem ser descomentadas no httpd.conf para suportar totalmente o SSL no Apache:

LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule ssl_module libexec/apache24/mod_ssl.so

O próximo passo é trabalhar com uma autoridade certificadora para ter certificados apropriados instalados no sistema. Isso vai configurar um cadeia de confiança para a pagina e prever alguns avisos de certificados auto assinados.

29.8.3.2. mod_perl

O módulo mod_perl torna possível escrever módulos Apache em Perl. Além disso, o intérprete persistente embutido no servidor evita a sobrecarga de iniciar um intérprete externo e a penalidade do tempo de inicialização do Perl.

O mod_perl pode ser instalado usando o pacote ou port www/mod_perl2. A documentação para usar este módulo pode ser encontrada em http://perl.apache.org/docs/2.0/index .html.

29.8.3.3. mod_php

Escrito porTom Rhodes.

PHP: Pré-processador de hipertexto ( PHP ) é uma linguagem de script de propósito geral que é especialmente adequada para desenvolvimento web. Capaz de ser incorporada em HTML, sua sintaxe se baseia em C, Java™ e Perl com a intenção de permitir desenvolvedores web para escrever rapidamente páginas da web geradas dinamicamente.

Suporte para PHP para o Apache e alguma outra parte escrita na linguagem, pode ser adicionada instalando o port apropriado.

Para todas versões suportadas, procure os dados do pacote usando o comando pkg:

# pkg search php

Uma lista vai ser disponibilizada incluindo as versões e partes adicionais que elas proverem. Os componentes são completamente modulares, significando que as partes especificas são habilitadas instalando o port apropriado. Para instalar o PHP na versão 7.4 para o Apache, use o seguinte comando:

# pkg install mod_php74

Se algum pacote dependente precisar ser instalado, ele irá ser instalado também.

Por padrão, o PHP não estará habilitado. As seguintes linhas precisam ser adicionadas no arquivo de configuração do Apache localizado em /usr/local/etc/apache24 para ativa-lo:

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

Em adição, a opção DirectoryIndex no arquivo de configuração irá precisar ser atualizada também e o Apache irá precisar ser reiniciado ou feito um relaoad também para as mudanças surtirem efeito.

Suporte para muitas partes do PHP podem ser instalado também usando o comando pkg. Por exemplo, para instalar suporte para o XML ou para SSL, instale os seguintes ports:

# pkg install php74-xml php74-openssl

Como antes, a configuração do Apache irá precisar ser recarregada para as mudanças surtirem efeito, mesmo em casos onde foi feita apenas a instalação de um modulo.

Para realizar uma reinicialização normal para recarregar a configuração, digite o seguinte comando:

# apachectl graceful

Uma vez que a instalação esteja completa, há dois métodos para obter o suporte para os modulos do PHP e a informação do ambiente dessa instalação. A primeira é instalar o binário completo do PHP e rodar o seguinte comando para obter a informação:

# pkg install php74
# php -i |less

Isso é necessário para passar a saída paga um paginador, como o comando more ou less para visualizar melhor a saída.

Finalmente, para fazer alguma mudança na configuração global do PHP há um arquivo bem documentado instalado dentro de /usr/local/etc/php.ini. No momento da instalação, esse arquivo não irá existir porque há duas versões para escolher, uma é o arquivo php.ini-development e outra o php.ini-production. Esses são pontos iniciais para ajudar os administradores na implementação.

29.8.3.4. Suporte a HTTP2

Suporte do Apache para o protocolo HTTP está incluido por padrão quando instala o port com o comando pkg. A nova versão do HTTP inclui muitas melhorias em relação a versão anterior, incluindo utilizar uma conexão singular para uma página, reduzindo as idas e vindas de conexões TCP. Também, os dados no cabeçalho do pacote é comprimido e o HTTP2 requer encriptação por padrão.

Quando o Apache estiver configurado para usar HTTP2 apenas, os navegadores web irão requisitar conexões seguras, encriptadas com HTTPS. Quando o Apache estiver configurado para usar ambas versões, o HTTP1.1 irá ser considerado uma opção substituta se algum problema surgir durante a conexão.

Embora essa mudança exija que os administradores façam alterações, elas são positivas e equivalem a uma Internet mais segura para todos. As mudanças são requeridas apenas para paginas não implementada corretamente com SSL e TLS.

Nota:

Essa configuração depende das seções anteriores, incluindo suporte a TLS. É recomendado que essas instruções seja seguidas antes de continuar com essa configuração.

Comece o processo habilitando o modulo http2 removendo o comentário da linha no arquivo /usr/local/etc/apache24/httpd.conf e trocando o modulo mpm_prefork pelo mpm_event pois o anterior não suporta o http2.

LoadModule http2_module libexec/apache24/mod_http2.so
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so

Nota:

Aqui há um port mod_http1 distinto que está disponível. Ele existe pra entregar segurança e correção de bugs mais rápido que o modulo instalado por padrão com o port apache24. Ele não é requisitado para o suporte do HTTP2 mas está disponível. Quando instalado, o mod_h2.so deve ser usado no lugar do mod_http2.so na configuração do Apache.

Aqui há dois métodos para implementar o HTTP2 no Apache; um caminho é de forma global para todos os sites e cada VirtualHost rodando no sistema. Para habilitar o HTTP2 globalmente, adicione a seguinte linha abaixo da diretiva ServerName:

Protocolos h2 http/1.1

Nota:

Para habilitar HTTP2 sobre texto simples, use h2h2chttp/1.1 no arquivo httpd.conf.

Tendo o h2c aqui irá permitir que o dado em texto simples do HTTP2 passar pelo sistema mas isso não é recomendado. Em adição a isso, usando o http/1.1 aqui irá permitir retornar para a versão do protocolo HTTP1.1 caso sejá necessário pelo sistema.

Para habilitar HTTP2 para VirtualHosts individuais, adicione a mesma linha com a diretiva VirtualHost no arquivo httpd.conf ou httpd-ssl.conf.

Recarregue a configuração usando o comando apachectlreload e teste a configuração seguindo um dos métodos após visitar uma das paginas hosteadas:

# grep "HTTP/2.0" /var/log/httpd-access.log

A saída deve ser semelhante à seguinte:

192.168.1.205 - - [18/Oct/2020:18:34:36 -0400] "GET / HTTP/2.0" 304 -
192.0.2.205 - - [18/Oct/2020:19:19:57 -0400] "GET / HTTP/2.0" 304 -
192.0.0.205 - - [18/Oct/2020:19:20:52 -0400] "GET / HTTP/2.0" 304 -
192.0.2.205 - - [18/Oct/2020:19:23:10 -0400] "GET / HTTP/2.0" 304 -

O outro metodo é usar o navegador web padrão no debugger do site ou o comando tcpdump; contanto, o uso de qualquer método está além do escopo desse documento.

Suporte para conexões do proxy reverso HTTP2 usando o modulo mod_proxy_http2.so. Quando declarado na configuração o ProxyPass ou RewriteRules [P], eles devem usar h2:// para a conexão.

29.8.4. Websites Dinâmicos

Além do mod_perl e do mod_php, outras linguagens estão disponíveis para a criação de conteúdo dinâmico da web. Estes incluem o Django e o Ruby on Rails.

29.8.4.1. Django

O Django é um framework de licença BSD projetado para permitir que desenvolvedores escrevam aplicações web elegantes e de alto desempenho rapidamente. Ele fornece um mapeador relacional de objeto para que os tipos de dados sejam desenvolvidos como objetos Python. Uma API rica e dinâmica de acesso ao banco de dados é fornecida para os objetos sem que o desenvolvedor tenha que escrever SQL. Ele também fornece um sistema de template extensível para que a lógica do aplicativo seja separada da apresentação HTML.

Django depende de mod_python, e um mecanismo de banco de dados SQL. No FreeBSD, o port www/py-django instala automaticamente o mod_python e suporta os banco de dados PostgreSQL, MySQL, ou SQLite, com o padrão sendo o SQLite. Para trocar o mecanismo de banco de dados, digite make config dentro do diretório /usr/ports/www/py-django, então instale o port.

Uma vez instalado o Django, a aplicação precisará de um diretório de projeto junto com a configuração Apache para usar o interpretador Python incorporado. Este intérprete é usado para chamar o aplicativo para URLs específicas no site.

Para configurar o Apache para que passe a fazer solicitações para determinadas URLs para a aplicação Web, adicione o seguinte ao httpd.conf, especificando o caminho completo para o diretório do projeto:

<Location "/">
    SetHandler python-program
    PythonPath "['/dir/to/the/django/packages/'] + sys.path"
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonAutoReload On
    PythonDebug On
</Location>

Consulte https://docs.djangoproject.com para maiores informações sobre como usar o Django.

29.8.4.2. Ruby on Rails

O Ruby on Rails é outro framework de software livre da Web que fornece uma stack de desenvolvimento completa. Ele é otimizado para tornar os desenvolvedores da Web mais produtivos e capazes de criar rapidamente aplicativos poderosos. No FreeBSD, ele pode ser instalado usando o pacote ou port www/rubygem-rails.

Consulte http://guides.rubyonrails.org para maiores informações sobre como usar o Ruby on Rails .

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.