Configurando um Servidor Apache – Arquivo httpd.conf
O arquivo httpd.conf possui as configuracoes do servidor web Apache, geralmente o mesmo está localizado dentro da árvore na pasta /conf. Conforme demonstrado abaixo, neste caso temos o servidor web instalado na pasta /usr/local/apache2 e o arquivo de configuracao localizado na pasta usr/local/apache2/conf.
FABRICIONOTE:/usr/local/apache2/bin # ls
ab apu-1-config dbmmanage htcacheclean htpasswd logresolve
apachectl apxs envvars htdbm httpd rotatelogs
apr-1-config checkgid envvars-std htdigest httxt2dbm
FABRICIONOTE:/usr/local/apache2/bin # cd..
FABRICIONOTE:/usr/local/apache2 # ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
FABRICIONOTE:/usr/local/apache2 # cd conf
FABRICIONOTE:/usr/local/apache2/conf # ls
extra httpd.conf magic mime.types original
FABRICIONOTE:/usr/local/apache2/conf #
O arquivo padrao gerado possui diversos parâmetros que já estao configurados de acordo com a instalacao do servidor. Descreveremos de forma simplicada os principais parâmetros que constam neste arquivo.
Server Root
Este parametro define o diretório base do servidor, dentro do qual os arquivos de configuracao, de erro e logs sao guardados. Podemos ver abaixo o parametro definido no arquivo do servidor configurado acima.
# Exemplo:
ServerRoot “/usr/local/apache2″
Listen
Este parametro define em qual porta o servidor web irá escutar, geralmente os servidores escutam na porta 80. Há também a possibilidade de escutar apenas uma porta em um determinado IP, o que pode ser útil caso a máquina onde o servidor está hospedado possua mais de um endereco IP.
# Exemplo:
Listen 80
LoadModule
Este parametro permite o carregamento de módulos, localizados dentro do diretório base do servidor, este módulos sao utilizados pelo servidor, independente do website que está sendo carregado. No arquivo de configuracao padrao esta opcao está comentada.
# Exemplo:
# LoadModule foo_module modules/mod_foo.so
ServerAdmin
Este parâmetro permite a definicão do e-mail do administrador do servidor, este e-mail será exibido em algumas páginas de erro.
# Exemplo:
ServerAdmin admin@nomedoservidor.com
ServerName
Este parâmetro permite a definicão manual do endereco registrado de DNS para o servidor e porta, caso exista. Este parâmetro é determinado automaticamente, mas para evitar problemas o Apache permite a configuracão manual. Caso o servidor não possua um domínio DNS registrado, pode-se utilizar o IP e porta do servidor nesta configuracão.
# Exemplo:
#ServerName www.example.com:80
DocumentRoot
Este parâmetro permite a definicão do diretório onde estão localizadas as páginas web que serão servidas pelo servidor web. Por padrão o Apache utiliza a pasta /htdocs localizado dentro do diretório base do Apache.
# Exemplo:
DocumentRoot “/usr/local/apache2/htdocs”
<Directory>
A utilizacão desta diretiva permite atribuir diversas diretivas ou regras para um conjunto de diretórios ou de subdiretórios de um pasta. Existem diversos parâmetros que podem ser utilizados para configuracão, neste roteiro citaremos apenas os mais simples.
#Exemplo
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
O exemplo acima mostra um conjunto de regras que se aplica a todos os diretórios. Este conjunto está presente no arquivo httpd.conf padrão gerado durante a instalacão. Vamos explicar cada um dos parâmetros listados. A diretiva Options possui diversas opcões de configuracão que podem ser ativadas, no caso acima a opcão FollowSymLinks está sendo ativada, esta opcão informa ao servidor Apache que ele deve aceitar link simbólicos caso o mesma exista em uma pasta (entenda link simbólico como a criacão de um atalho para determinado arquivo ou diretório).
Logo após esta opcão temos a diretiva AllowOverride, seguida da opcão None. Esta diretiva informa ao Apache se ele deve ou não ler os arquivos .htaccess (este arquivo será discutida posteriormente) que um diretório contém, utilizando a opcão None estamos informando ao Apache para ignorar todos os arquivos .htaccess em qualquer diretório.
Na próxima linha temos a diretiva Order, que irá indicar quais regras o servidor Apache irá utilizar para validar se um novo requerimento pode ou não ser atendido. Ao utilizar a opcão deny,allow estamos informando ao Apache para negar todos os pedidos que se enquadre em pelo menos um regra de negacão, com excessão dos pedidos que também se enquadram em pelo menos uma regra que o permita (allow).
A diretiva Deny informa para quais hosts o acesso a qualquer parte do servidor será negado. A mesma é seguida, obrigatoriamente, da cláusula from. No caso acima estamos informando ao servidor para negar o acesso a qualquer parte do servidor a todos os hosts. Como podemos perceber estamos utilizando a regra de negar tudo e abrir somente o necessário, conforme veremos abaixo.
A configuracão acima deve estar presente sempre que possível pois a utilizacão da mesma automaticamente bloqueia qualquer tentativa de acessar outras áreas do sistema de arquivos, devido a política de negar tudo. Abaixo ativaremos somente o diretório onde os arquivos que serão servidos estão guardados, /htdocs.
#Exemplo
<Directory “/usr/local/apache2/htdocs”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
A regra acima já possui alguns elementos novos. Como podemos observar definimos dentro da diretiva Directory a qual diretório a mesma se aplica, neste caso /usr/local/apache/htdocs , ou seja, o local onde estão armazenados os arquivos que serão servidos. Observando o arquivo vemos que as configuracões presentes nos arquivos .htaccess ainda são ignoradas, mas que a política de acesso foi alterada, ou seja, estamos utilizando agora a ordem allow,deny.
A utilizacão da ordem acima fará com que o Apache verifique se o pedido do host se encaixa em alguma regra allow, caso negativo o pedido é descartado. Após verificar que o mesmo se encaixa em uma regra de acesso, ele irá verificar se o pedido se enquadra em algum regra de negacão, caso positivo o pedido será descartado. Finalmente temos a regra Allow from all, que informa ao servidor Apache que o mesmo deve aceitar requisicões de qualquer host que tenha como objetivo algum dos dados constantes no diretório /usr/local/apache2/htdocs.
<IfModule>
A diretiva IfModule é utilizada para executar instrucões condicionais, ou seja, apenas se a regra utilizada for verdadeira que as instrucões localizadas dentro da diretiva serão executadas.
#Exemplo
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
O parâmetro que segue a declaracão é o nome do módulo, neste caso, a diretiva está verificando se o módulo dir_module está carregado. Como não carregamos explicitamente este módulo na diretiva LoadModule devemos verificar se o mesmo está sendo carregado automaticamente. Podemos verificar isto através do comando ./apachectl -l, que irá listar os módulos que estão sendo carregados automaticamente, conforme listado abaixo.
FABRICIONOTE:/usr/local/apache2/bin # ./apachectl -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
Podemos verificar, claramente, que o módulo em questão, que é responsável por permitir enderecamento do tipo “./htdocs”, ou seja, enderecamentos relativos, sempre será carregado, logo, a diretiva será sempre verdadeira.
DirectoryIndex
Dentro da mesma possuímos outra diretiva, DirectoryIndex, esta diretiva irá procurar pelo arquivo designado como argumento sempre que um usuário fizer a requisicão de um diretório, ou seja, se o usuário digitar o endereco http://meusite.com/forum/, o servidor Apache irá procurar dentro da pasta fórum o arquivo index.html, caso o mesmo exista, caso contrário exibirá a estrutura do diretório, condicionada a permissão para realizar esta listagem.
<FilesMatch>
A diretiva FilesMatch permite gerenciar permissões para um determinado tipo de arquivo, através da utilizacão de uma expressão regex como argumento da regra, conforme listado abaixo.
#Exemplo
<FilesMatch “^\.ht”>
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
A utilizacão de expressões regex é comum em diversos aplicativos e a sua documentacão é extensa, caso o leitor tenha interesse favor verificar o endereco a seguir para maiores definicões: http://www.perl.com/doc/manual/html/pod/perlre.html
Vamos explicar cada parâmetro do argumento. O parâmetro ^ indica que os parâmetros seguintes deverão ocorrer no início da linha, ou seja, no ínicio do nome do arquivo. O \ é utilizado para comentar o próximo caractere, caso contrário o mesmo poderia ser interpretado como parte do comando, neste caso, ele comentou o caractere “.”, indicando que o arquivo comeca com “.”. As duas letras seguintes não são comandos regex, logo, são interpretadas como parte da condicão do nome do arquivo. Resumindo, estamos querendo todos os arquivos que comecem com “.ht”, ou seja, no Apache estes arquivos são, geralmente, .htaccess e .htpasswd.
Agora que sabemos a quais arquivos a regra se aplica, verificaremos o conteúdo da regra, neste caso, a diretiva está utilizando a ordem allow,deny citada anteriormente, logo, o Apache verificará se a requisicão se enquadra em alguma regra de permissão, caso positivo irá verificar se a mesma se enquadra em alguma regra de negacão, caso positivo irá descartar a requisicão.
A condicão Deny from all, indica que todas as requisicoes para arquivos que aderem o regex deverão ser negadas. A nova condicão Satisfy All é utilizada para indicar que hosts tentando obter estes arquivos deverão se enquadrar nas restricões de host, ou seja, o host deve estar permitido a se conectar e também deverá se autenticar com usuário e senha, caso esta protecão esteja ativada. Esta condicão possui também a opcao Any, neste caso, basta que o usuário que esteja conectando satifaca alguma das duas regras anteriores: restricão de host ou autenticacão usuário/senha.
A regra que vimos acima na diretiva FilesMatch, tem como objetivo bloquear o acesso aos arquivos .htaccess e .htpasswd, que poderiam comprometer a seguranca do servidor.
ErrorLog
Esta diretiva indica em qual arquivo deverão ser gravados os erros que forem encontrados pelo servidor Apache.
#Exemplo
ErrorLog logs/error_log
LogLevel
#Exemplo
LogLevel warn
Esta diretiva indica o nível das mensagens de erro que serão gravadas no arquivo de log, conforme listado abaixo:
-
emerg : Grava apenas emergências, geralmente quando o servidor está inutilizável.
-
alert : Grava erros que devem ser resolvidos imediatamente.
-
crit : Grava erros relacionados a condicões críticas, como, por exemplo, falhas aos tentar abrir um socket.
-
error: Grava condicões de erros normais.
-
warn: Grava erros até o nível de advertência, como, por exemplo erros recuperáveis pelo servidor.
-
notice: Grava mensagens mesmo que não ocorra erro mas que sejam significantes.
-
info: Grava até mensagens informativas, indicando solucões para pequenos problemas de performance.
-
debug: Grava todas as mensagens, desde erros até abertura de arquivos de configuracão.
Na configuracão acima, estamos optando por gravar mensagens até o nível de advertência, ou seja, erros que podem ser contornados pelo servidor mas que, provavelmente, não deveriam estar ocorrendo.
ScriptAlias
<IfModule alias_module>
ScriptAlias /cgi-bin/ “/usr/local/apache2/cgi-bin/”
</IfModule>
Esta diretiva mapeia URLs para uma determina pasta e indica que o destino não é um diretório mas sim um script CGI, ou seja, uma aplicacão. No caso acima o servidor Apache irá redirecionar qualquer URL contendo /cgi-bin/ para a pasta “/usr/local/apache2/cgi-bin/”, e irá verificar que neste caso deverá ser acionado um script CGI.
Exemplo: “http://www.meuservidor.com/cgi-bin/cadastro”, a requisicão proveniente desta URL será redirecionada para a pasta citada e será executado o script CGI “cadastro”, caso o mesmo exista.
Já explicamos anteriormente a diretiva IfModule, o módulo que está sendo verificado é responsável por mapear enderecos de URL para outras partes do sistema de arquivos do servidor, além de prover redirecionamento de requisicões.
Como definimos o diretório CGI acima, o arquivo de configuracões possui também uma configuracão de permissões para este diretório, conforme listado abaixo. O endereco deste diretório deve estar igual ao endereco utilizado na diretiva ScriptAlias acima.
<Directory “/usr/local/apache2/cgi-bin”>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
A diretiva acima estabelece que não serão interpretados os arquivos .htaccess do diretório, também estabelece que nenhuma opcao extra da diretiva Options será utilizada. A diretiva utiliza a ordem allow,deny, ou seja, a requisicão deverá primeiramente se enquadrar em alguma regra de permissão ou será descartada. Caso a mesma se enquadre, o servidor verificará se a mesma se enquadra em algum regra de negacão, caso positivo, a requisicão será descartada. Finalmente, a regra estabelece que todos os hosts são autorizados a enviar requisicões para este diretório, observando que, a única forma de acessar o mesmo é através do alias /cgi-bin/ descrito anteriormente.
DefaultType
#Exemplo
DefaultType text/plain
Determina o tipo padrão que o servidor Apache irá utilizar para interpretar documentos para os quais o mesmo não reconheca a extensão do arquivo. Neste caso estamos utilizando o tipo de arquivo texto padrão, que será utilizado para exibir todos os documentos cujo tipo não for reconhecido pelo servidor Apache.
TypesConfig
#Exemplo
TypesConfig conf/mime.types
A diretiva acima indica em qual arquivos estão localizados os tipos de arquivos reconhecidos pelo servidor Apache, neste caso, o mesmo está apontando para o arquivo mime.types, que se encontra na pasta /conf.
Ao abrir o arquivo mime.types encontramos diversos formatos de arquivos que podem ser interpretados pelo servidor, o mime type é utilizado pelo servidor para responder a uma requisicão por um arquivo específico, ou seja, o mime type é incluído na resposta gerada pelo servidor, permitindo ao navegador identificar o tipo do arquivo e qual aplicacão o mesmo deverá acionar para exibir corretamente os dados recebidos.
Abaixo temos um exemplo de algumas extensões que se encontram dentro do arquivo mime.types. Primeiramente o arquivo define o tipo do arquivo e, caso conheca, a extensão do mesmo.
# MIME type Extensions
application/msword doc
application/octet-stream bin dms lha lzh exe class so dll dmg
application/ogg ogg
application/pdf pdf
application/vnd.ms-excel xls
application/vnd.ms-powerpoint ppt
application/x-shockwave-flash swf
application/xhtml+xml xhtml xht
application/xslt+xml xslt
application/xml xml xsl
application/xml-dtd dtd
application/zip zip
audio/midi mid midi kar
audio/mpeg mpga mp2 mp3
audio/x-pn-realaudio ram ra
application/vnd.rn-realmedia rm
audio/x-wav wav
image/gif gif
image/jpeg jpeg jpg jpe
image/png png
image/svg+xml svg
text/css css
text/html html htm
text/plain asc txt
video/mpeg mpeg mpg mpe
video/quicktime qt mov
video/x-msvideo avi
AddType
A diretiva AddType permite adicionar, manualmente, novos tipos de arquivo, que não estão inclusos no arquivo mime.types. Esta opcão permite também sobrescrever a configuracão existente no arquivo mime.types, conforme exemplo abaixo.
É importante citar que ambas as diretivas TypesConfig e AddTypes estão inclusas dentro de um diretiva IfModule, que verifica a existência do módulo mime_module, responsável por efetuar a interpretacão dos tipos mime, alterando o idioma, conjunto de caracteres e forma de codificacão de acordo com o tipo de arquivo.
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
Error Document
Esta diretiva não é obrigatória, pois o servidor Apache já possui páginas de erro padrão que são exibidas sempre que um erro é encontrado. Podemos alterar estas páginas através da utilizacão da diretiva ErrorDocument, conforme exemplo abaixo. Ela recebe dois argumentos, o primeiro é o tipo de erro (os mais comuns são 500: Servidor Ocupado e 404: Página não Encontrada) e o segundo argumento é qual arquivo ou página deverá ser exibido caso o erro ocorra. É recomendável personalizar as páginas de erro, retirando informacões sensíveis, como, por exemplo, a versão do servidor e em qual IP o mesmo está rodando.
# Exemplo:
ErrorDocument 500 “Desculpe, mas o servidor está muito ocupado. Tente mais tarde.”
ErrorDocument 404 FaltaPagina.html
Include
# Exemplo
Include conf/extra/httpd-manual.conf
Por último, temos a diretiva Include, que permite a inclusão de outros arquivos de configuracão dentro do httpd.conf, sem necessidade, de importar, manualmente, todas as regras. A utilizacão desta diretiva facilita a leitura do arquivo e separa as regras de acordo com sua área de atuacão.











Últimos Comentários