FreeBSD

Servidor Web

Apache HTTP Server


O Apache HTTP Server é um projeto da Apache Software Foundation (www.apache.org). Dispensa maiores apresentações, visto que é o servidor Web mais utilizado na Internet desde abril de 1996. Em outubro de 2003 mais de 64% dos servidores Web da Internet utilizavam o Apache.

Faça o download da última versão estável disponível, atualmente é a 2.0.48. O download pode ser feito a partir da página http://httpd.apache.org/download.cgi ou diretamente a partir de um mirror como http://apache.usp.br/httpd.

Descompacte o arquivo httpd-2.0.48.tar.gz em /tmp e acesse o diretório que será criado, /tmp/httpd-2.0.48. Digite os seguintes comandos:

# ./configure
# make
# make install

O servidor será instalado em /usr/local/apache2. O arquivo de configuração fica em /usr/local/apache2/conf/httpd.conf. Na instalação do Apache já é instalado um arquivo padrão, bastante comentado, sendo por isso recomendada a sua leitura. Podemos testar o servidor com este arquivo, para isso inicialize o Apache, com o seguinte comando:

# /usr/local/apache2/bin/apachectl start

A partir de um browser acesse o endereço http://ip_do_servidor. Deverá aparecer uma página teste, indicando que a instalação ocorreu com sucesso. Mesmo assim, o arquivo httpd.conf deve sofrer algumas modificações. Segue abaixo um modelo do arquivo, que pode ser tomado como base para a configuração. Neste arquivo foram omitidas algumas configurações, como por exemplo de VirtualHosts e SSL. Este arquivo deve ser colocado no diretório /usr/local/apache2/conf:

-------------------- Arquivo httpd.conf --------------------
# httpd.conf

### Secao 1: Contexto Global

#
# Diretorio sob o qual esta instalado o servidor
#
ServerRoot "/usr/local/apache2"

# PidFile: arquivo no qual o servidor guarda o seu PID quando inicializado
#
PidFile logs/httpd.pid

#
# Timeout: tempo maximo em segundos para receives e sends
#
Timeout 300

#
# KeepAlive: permitir ou nao conexoes persistentes (mais de uma requisicao por conexao)
#
KeepAlive On

#
# MaxKeepAliveRequests: numero maximo de requisicoes durante uma conexao persistente
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: tempo de espera por uma nova requisicao da mesma conexao
#
KeepAliveTimeout 15

##
## Ajuste de Tamanho do Server-Pool
##
# prefork MPM
# StartServers: numero de processos servidores inicializados
# MinSpareServers: minimo de processos servidores separados
# MaxSpareServers: maximo de processos servidores separados
# MaxClients: numero maximo de processos servidores permitidos (maximo de clientes)
# MaxRequestsPerChild: numero maximo de requisicoes que um processo servidor atende
#(0=ilimitado)
<IfModule prefork.c>
   StartServers 5
   MinSpareServers 5
   MaxSpareServers 10
   MaxClients 150
   MaxRequestsPerChild 0
</IfModule>

#
# Listen: endereço IP e porta na qual o servidor deve esperar requisicoes
# Caso um IP nao seja especificado ira ouvir em todas as interfaces
#
#Listen 12.34.56.78:80
Listen 80

### Section 2: Configuracao do servidor 'principal'
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition. These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#

#
# Usuario e grupo sob os quais o servidor ira rodar
#
#User nobody
#Group #-1
User www
Group www

#
# ServerAdmin: endereco de e-mail do administrador do servidor
# Aparece em alguns documentos gerados pelo servidor, como paginas de erro
#
#ServerAdmin you@example.com
ServerAdmin webmaster@servteste.exemplo.org

#
# ServerName: endereco e porta que identificam o servidor
# Caso nao houver um nome valido no DNS, deve-se especificar o IP
#
#ServerName www.example.com:80
ServerName 192.168.0.10:80

#
# UseCanonicalName: determina como o Apache se auto-referencia
# Se setado em Off, será utilizado o hostname e porta fornecido pelo cliente
# Se setado em On, será utilizado o valor da diretiva ServerName
#
UseCanonicalName Off

#
# DocumentRoot: diretório raiz dos documentos publicados
#
DocumentRoot "/usr/local/apache2/htdocs"

#
# Cada diretorio ao qual o Apache tem acesso pode ser configurado em relacao
# a quais servicos e caracteristicas sao permitidos ou proibidos neste
# diretorio (e seus subdiretorios)
#
# Primeiramente, sera configurado o "default", bem restrito
#
<Directory />
   Options FollowSymLinks
   AllowOverride None
</Directory>

#
# Deste ponto em diante serao habilitadas caracteristicas especificas a cada contexto
#

#
# Ajustar de acordo com o DocumentRoot
#
<Directory "/usr/local/apache2/htdocs">

   #
   # Os valores possiveis para a diretiva Options sao "None", "All",
   # ou qualquer combinacao de:
   # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
   #
   # A opcao "MultiViews" nao esta inclusa em "All"
   #
   # Maiores informacoes em http://httpd.apache.org/docs-2.0/mod/core.html#options
   #
   Options Indexes FollowSymLinks

   #
   # AllowOverride controla que diretivas podem ser colocadas em arquivos .htaccess
   # Pode ser "All", "None", ou qualquer combinacao de:
   # Options FileInfo AuthConfig Limit
   #
   AllowOverride AuthConfig

   #
   # Controla quem poderá acessar.
   #
   Order allow,deny
   Allow from all

</Directory>

#
# UserDir: nome do diretorio que sera procurado (dentro do diretorio
# home) no caso de uma requisicao /~user
#
UserDir public_html

#
# Controle de acesso para diretorios UserDir.
#
<Directory /home/*/public_html>
   AllowOverride FileInfo AuthConfig Limit Indexes
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   <Limit GET POST OPTIONS PROPFIND>
      Order allow,deny
      Allow from all
   </Limit>
   <LimitExcept GET POST OPTIONS PROPFIND>
      Order deny,allow
      Deny from all
   </LimitExcept>
</Directory>

#
# DirectoryIndex: define qual arquivo sera oferecido quando for requisitado
# um diretorio
#
DirectoryIndex index.html index.html.var index.htm

#
# AccessFileName: arquivo que sera verificado em cada diretorio em busca
# de diretivas de configuracao adicionais (permitidas pelo AllowOverride)
#
AccessFileName .htaccess

#
# As seguintes linhas proibem os arquivos .htaccess e .htpasswd de serem
# visualizados
#
<Files ~ "^\.ht">
   Order allow,deny
   Deny from all
</Files>

#
# TypesConfig: define onde fica o arquivo mime.types
#
TypesConfig conf/mime.types

#
# DefaultType: tipo MIME default utilizado
#
DefaultType text/plain

#
# Onde fica o arquivo magic
#
<IfModule mod_mime_magic.c>
   MIMEMagicFile conf/magic
</IfModule>

#
# HostnameLookups: logar os hostnames dos clientes (On)
# ou apenas os enderecos IP (Off)
#
HostnameLookups Off

#
# ErrorLog: onde fica o arquivo de log de erros
#
ErrorLog logs/error_log

#
# LogLevel: controla o nivel do log de erro. Os valores podem ser:
# debug, info, notice, warn, error, crit, alert, emerg.
#
LogLevel warn

#
# As diretivas abaixo definem alguns formatos de log
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

#
# Arquivo de log unico, com access, agent e referer
# (Combined Logfile Format)
#
CustomLog logs/access_log combined

#
# ServerTokens: configura qual o nivel de informacoes sobre o servidor
# eh passado no cabecalho 'Server HTTP response'
# Valores possiveis: Full | OS | Minor | Minimal | Major | Prod
# Full (default) apresenta mais informacoes, e Prod menos
#
ServerTokens Prod

#
# ServerSignature: apresenta ou nao informacoes sobre a versao do servidor
# em documentos gerados dinamicamente, como paginas de erro. As opcoes sao
# On (informa a versao), Off (nao informa) e EMail (informa a versao e um
# link para o endereco de e-mail do ServerAdmin)
#
ServerSignature Off

#
# Aliases: adicionar aqui quantos aliases for necessario. O formato eh
# Alias atalho caminhoreal
#
Alias /icons/ "/usr/local/apache2/icons/"

#
# Configuracoes do diretorio icons
#
<Directory "/usr/local/apache2/icons">
   Options Indexes MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

#
# Alias para o manual do Apache (pode ser removido se documentacao nao
# for necessaria)
#
AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/usr/local/apache2/manual$1"

#
# Configuracoes do diretorio do manual
#
<Directory "/usr/local/apache2/manual">
   Options Indexes
   AllowOverride None
   Order allow,deny
   Allow from all

   <Files *.html>
      SetHandler type-map
   </Files>

   SetEnvIf Request_URI ^/manual/de/ prefer-language=de
   SetEnvIf Request_URI ^/manual/en/ prefer-language=en
   SetEnvIf Request_URI ^/manual/fr/ prefer-language=fr
   SetEnvIf Request_URI ^/manual/ja/ prefer-language=ja
   SetEnvIf Request_URI ^/manual/ko/ prefer-language=ko
   SetEnvIf Request_URI ^/manual/ru/ prefer-language=ru
   RedirectMatch 301 ^/manual(?:/(de|en|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2
</Directory>

#
# ScriptAlias: controla quais diretorios contem scripts server-side
#
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

#
# Configuracoes do diretorio cgi-bin
#
<Directory "/usr/local/apache2/cgi-bin">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
</Directory>

#
# Redirect: permite indicar aos clientes o novo endereco de documentos que
# nao estao mais neste servidor
# Exemplo:
#
# Redirect permanent /foo http://www.example.com/bar

#
# IndexOptions: controla a aparencia das listagens de diretorios geradas pelo
# servidor
#
IndexOptions FancyIndexing VersionSort

#
# AddIcon*: estas diretivas informam os icones adequados a cada tipo de arquivo
# So funcionam com a opcao FancyIndexing ativada
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon: icone padrao para arquivos desconhecidos nas listagens
#
DefaultIcon /icons/unknown.gif

#
# AddDescription: permite que seja colocada uma descricao para os tipos
# de arquivos nas listagens
# Exemplos:
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

#
# ReadmeName: arquivos README padrao, que sera colocado apos a listagem
# HeaderName: arquivo HEADER padrao, que sera colocado antes da listagem
#
ReadmeName README.html
HeaderName HEADER.html

#
# IndexIgnore: conjunto de arquivos que nao devem ser incluidos nas listagens
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

#
# AddLanguage: relacao entre os idiomas usados nas negociacoes de conteudo e as
# extensoes
#
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw

#
# LanguagePriority: prioridade de idioma caso ocorra algum problema
# na negociacao de conteudo
#
LanguagePriority pt-BR en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt ru sv zh-CN zh-TW

#
# ForceLanguagePriority: prioridade na negociacao de conteudo caso
# nao haja o conteudo adequado
#
ForceLanguagePriority Prefer Fallback

#
# AddDefaultCharset: charset padrão para as paginas servidas
#
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off

#
# AddCharset: relacao entre extensoes de arquivo e charsets
#
AddCharset ISO-8859-1 .iso8859-1 .latin1
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddCharset ISO-8859-3 .iso8859-3 .latin3
AddCharset ISO-8859-4 .iso8859-4 .latin4
AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5 .Big5 .big5
# Para russo, mais de um charset eh utilizado:
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8
#
AddCharset GB2312 .gb2312 .gb
AddCharset utf-7 .utf7
AddCharset utf-8 .utf8
AddCharset big5 .big5 .b5
AddCharset EUC-TW .euc-tw
AddCharset EUC-JP .euc-jp
AddCharset EUC-KR .euc-kr
AddCharset shift_jis .sjis

#
# AddType: permite adicionar tipos MIME akem do arquivo mime.types
#
#AddType application/x-tar .tgz

#
# AddEncoding: permite que certos browsers descompactem arquivos
# 'on the fly'
#
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz

#
# Se as diretivas AddEncoding acima estiverem comentadas, devem
# ser indicados os tipos de arquivos:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

#
# Para 'type maps' (negociacoes de conteudo):
#
AddHandler type-map var

#
# Mensagens de erro podem ser personalizadas de tres formas:
# 1) texto 2) redirecionamento local 3) redirecionamento externo
#
# Exemplos:
#ErrorDocument 500 "Ocorreu um problema com o servidor."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# Diretivas para modificar as respostas HTTP normais devido a erros
# conhecidos em alguns browsers
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

#
# As diretivas a seguir desativam redirecionamentos em requisicoes nao-GET
# para um diretorio que nao contenha a barra final, para contornar
# erros em alguns clientes
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully

#
# Permite relatorios de status do servidor
# Deve-se configurar o dominio em .example.com
# Acessar http://servidor/server-status
#
#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from example.com
#</Location>

-------------------- Fim do arquivo httpd.conf --------------------

Feito isso, salve o arquivo httpd.conf e reinicie o Apache, através do seguinte comando:

# /usr/local/apache2/bin/apachectl restart

Deverá funcionar normalmente. Junto com a instalação do servidor, temos a documentação, que pode ser acessada no endereço http://ip_do_servidor/manual. É bom tê-la como referência para qualquer dúvida ou problema. Os arquivos que vêm por padrão no diretório /usr/local/apache2/htdocs podem ser removidos, e deve ser colocado neste diretório o conteúdo a ser publicado no raiz do servidor, ou seja, acessível através de http://servidor. Os usuários também podem publicar suas páginas, criando a pasta public_html em seus diretórios home e dando permissão de leitura e execução para todos.

Faça agora o script de incialização do Apache, em /usr/local/etc/rc.d/httpd.sh. Os comandos para inicializar e finalizar são, respectivamente:

/usr/local/apache2/bin/apachectl start

e

/usr/local/apache2/bin/apachectl stop

O arquivo de log de acessos ao servidor fica em /usr/local/apache2/logs/access_log. O arquivo de log de erros é /usr/local/apache2/error_log, verifique-o para saber se está ocorrendo algum problema.

Há uma característica útil no servidor Web que é a restrição de acesso, via senha, a determinadas páginas. Uma forma de fazer isso é criar no diretório a ser protegido um arquivo chamado .htaccess, como no exemplo abaixo:

--------------- Arquivo .htaccess --------------------
AuthType Basic
AuthName "Acesso Restrito"
AuthUserFile /home/fulano/public_html/restrito/.htpasswd
Require user fulano

--------------- Fim do arquivo .htaccess --------------------

Após isso, criamos um arquivo com as senhas, chamado .htpasswd, no mesmo diretório. Isto deverá ser feito através do utilitário /usr/local/apache2/bin/htpasswd, da seguinte maneira:

# /usr/local/apache2/bin/htpasswd -c /home/fulano/public_html/restrito/.htpasswd fulano

Dessa forma, quando for acessada a página http://servidor/~fulano/restrito, será necessário o login fulano e a senha que foi configurada através do htpasswd. Deverá ser atribuído a estes arquivos (.htaccess e .htpasswd) o grupo www e a permissão 640, para que o Apache, que roda sob o grupo www, possa ler. Recomendo a leitura do HowTo "Authentication, Authorization and Access Control", encontrado em http://servidor/manual/howto/auth.html.

 

Atualizado em 03/02/04.

Heini Thomas Geib.
http://infsr.unijui.tche.br/~heini

Voltar