Página seguinte Página anterior Índice

68. sistema/rede/apache

68.1 Quais são as opções de configuração do Apache ? (httpd)

O servidor httpd Apache tem a função de servir páginas html para intranet ou internet e possui grandes qualidades. Entre elas, e de onde o nome do aplicativo se originou, a de ser um programa bastante "patcheável" ("patchy" em inglês, logo o nome Apache veio de "a patchy server") extendendo suas capacidades iniciais por fazer uso de módulos diversos. Estes, adicionam o suporte a php, cgi e outros, e são de suma importância para um servidor http seguro e versátil.

A configuração básica abordada neste documento, tem 3 seções importantes:

**** Configuração principal (editando o arquivo de configuração) ****

Os arquivos responsáveis por toda a configuração do httpd são três
(acess.conf, srm.conf e httpd.conf), mas apenas um deles importa realmente
(httpd.conf), sendo os outros dois consideredos dispensáveis, já que é
possível colocar tudo que poderia estar nestes, no principal.

As opções neste arquivo estão já estão comentadas mas mesmo assim aqui vai uma 
descrição das mesmas. As principais são:

# ServerType is either inetd, or standalone.  Inetd mode is only supported
# on
# Unix platforms.
#
ServerType standalone
 
Diz ao sistema se o httpd vai ser rodado via script próprio 
(standalone), ou a partir de do arquivo inetd.conf (inetd).
(em "inetd" o httpd fica ocioso enquanto o inetd fica monitorando as
requisições, quando houver alguma, ele avisa e o serviço começa a funcionar)

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE!  If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the LockFile documentation
# (available at <htmlurl url="http://www.apache.org/docs/mod/core.html#lockfile);" name="http://www.apache.org/docs/mod/core.html#lockfile);">
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
#
ServerRoot /etc/httpd
    
Esta cuida do caminho do diretório onde irão ficar os arquivos de
configuração. Pode ser mudado se necessário. 



#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300
 
Tempo máximo (em segundos) que o servidor que o servidor esperará,
mantendo uma conexão aberta com o cliente. Se o limite for excedido, ele
terá de criar uma nova conexão com o mesmo. 



#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
 
Diretamente ligado com a opção acima, define se o processo de manter a
conexão com o cliente está ativo ou não.



#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100
 
Número máximo de conexões mantidas, sem necessidade de renovação. Quanto
mais alto o número, melhor a performance (com o hardware adequado).



#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

Máximo (de segundos) a espera de nova requisição. 



#
# Number of servers to start initially --- should be a reasonable ballpark
# figure.
#
StartServers 10
 
Número de servers iniciais, ou seja, logo no início do processo, o httpd
poderia responder a 10 conexões simultaneas ao mesmo site.



#
# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# the system with it as it spirals down...
#
MaxClients 150
 
Número máximo de conexões simultaneas por clientes ao site. Se for
ultrapassada, mostrará a infame mensagem "http server busy".



#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
#Listen 3000
#Listen 12.34.56.78:80
 
Permite ao __principal__ httpd server, responder em mais de um ip
(descomentando o 12.34.56.78:80 por exemplo, habilitaria ao server http
escutar em um ip além de seu ip normal (o da própria máquina))



#
# BindAddress: You can support virtual hosts with this option. This
# directive
# is used to tell the server which IP address to listen to. It can either
# contain "*", an IP address, or a fully qualified Internet domain name.
# See also the <VirtualHost> and Listen directives.
#
BindAddress 192.168.255.108:80

Esse é importante. Por default a linha BindAddress vem comentada pois
como está apresentada acima, habilita o acesso a um dominio virtual (em
nosso caso, o ip 192.168.255.108:80 (o :80 seria indicando a porta 80) que
mais além será explicado mais além. Para cada virtual host, é necessária uma
entrada "BindAddress e um número ip" 



#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO
# you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Please read the file README.DSO in the Apache 1.3 distribution for more
# details about the DSO mechanism and run `httpd -l' for the list of already
# built-in (statically linked and thus always available) modules in your
# httpd
# binary.
#
# Note: The order is which modules are loaded is important.  Don't change
# the order below without expert advice.
#

# Example:
# LoadModule foo_module modules/mod_foo.so
#
#LoadModule mmap_static_module modules/mod_mmap_static.so
LoadModule env_module         modules/mod_env.so
(seguido de uma lista de LoadModule e mais além, AddModule)

Descomentando quaisquer das linhas que comecem com LoadModule ou
AddModule, valida o carregamento de módulos feito na inicialização do httpd.
Estes funcionam como opções, por exemplo, habilitar ou não o suporte a
arquivos cgi no server, etc



#
# Port: The port to which the standalone server listens. For
# ports < 1023, you will need httpd to be run as root initially.
#
Port 80
 
O httpd responde por default na porta 80, neste campo você poderá
modificá-la se quiser.



#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.
#
ServerAdmin root@localhost

O endereço email para onde será mandado algo se o server acusar erro ou
anormalidades



#
# ServerName allows you to set a host name which is sent back to clients for
# your server if it's different than the one the program would get (i.e.,
# use
# "www" instead of the host's real name).
#
# Note: You cannot just invent host names and hope they work. The name you
# define here must be a valid DNS name for your host. If you don't
# understand
# this, ask your network administrator.
# If your host doesn't have a registered DNS name, enter its IP address
# here.
# You will have to access it by its address (e.g., <htmlurl url="http://123.45.67.89/)" name="http://123.45.67.89/)">
# anyway, and this will make redirections work in a sensible way.
#
ServerName vader.suptel

Outro importante. Determina o nome do server __principal__. Importante: o
nome tem que obrigatoriamente constar em DNS (um ip associado a um nome)
pois apenas inventando um, não irá adiantar. O modo de chamá-lo seria
<htmlurl url="http://nome" name="http://nome"> mas se o mesmo não tiver nenhum em DNS, coloque o ip (seria
<htmlurl url="http://numero-ip" name="http://numero-ip"> para chamá-lo então, neste caso).



#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/html"

Determina o caminho onde estarão os arquivos html do servidor
__principal__. IMPORTANTE: o diretório deve estar com permissão 755 (chmod
755, sendo leitura, escrita e execução para o dono, leitura e execução para
grupo e outros que não sejam do grupo nem donos (others). 



#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/html">

#
# This may also be "None", "All", or any combination of "Indexes",
# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
    Options Indexes FollowSymLinks Includes

#
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
    AllowOverride None

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
</Directory>

Este conjunto de campos determinam as opções que os diretórios onde
contém documentos htmls a serem acessados irão ter. A primeira "# This
should.." deve ser conter o mesmo diretório que o "DocumentRoot" tem (o
/html). IMPORTANTE: TODAS ESTAS DEVERÃO SER COPIADAS (E EDITADAS SE PRECISO)
PARA AS PASTAS PRINCIPAIS QUE CONTIVEREM ARQUIVOS HTML DO SERVIDOR PRINCIPAL
OU DOMINIO VIRTUAL. Se por exemplo vc tiver apenas um servidor virtual alem
do principal que responda no diretorio /vh (veremos como fazer essa
associação mais além), você terá de ter as entradas <Directory "/vh"> e
todas as abaixo desta, nem que sejam apenas copiadas, abaixo do término da
ultima (# Controls who can get stuff from this server.).



#
# UserDir: The name of the directory which is appended onto a user's home
# directory if a ~user request is received.
#
UserDir public_html

Esta opção é bem útil. Cuida de qual diretório o usuário terá de fazer,
se quiser ter uma página em seu home. No caso, como está configurado, ele
precisará criar um diretório public_html (o nome pode ser alterado no campo
acima) e colocar algo em html alí, podendo ser acessado com
<htmlurl url="http://nome.da.maquina/~nome-do-usuário." name="http://nome.da.maquina/~nome-do-usuário."> IMPORTANTE: COMO MENCIONADO
ANTERIORMENTE, ESTE E TODOS OS DIRETÓRIO ANTERIORES PRECISAM TER PERMISSÕES 755
AFIM DE GARANTIR ACESSO.



#
# Control access to UserDir directories.  The following is an example
# for a site where these directories are restricted to read-only.
#

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
        Order deny,allow
        Deny from all
    </Limit>
</Directory>

Esta opção coordena os diretos de acesso ao diretório public_html dos
usuários e vem por padrão, comentada. No caso você deve descomentá-la e
modificá-la de acordo com o diretório home de seus usuários (por exemplo, o
campo <Directory /home/*/public_html> diz que, no diretório /home, todos que
existem dentro dele e que tenham public_html vão ser passíveis de acesso,
sob as regras configuradas abaixo desta linha.



#
# DirectoryIndex: Name of the file or files to use as a pre-written HTML
# directory index.  Separate multiple entries with spaces.
#
DirectoryIndex index.html index.htm index.cgi

Esta é bastante importante também pois determina quais nomes de arquivos
serão válidos para realizar-se a abertura dos mesmos em um browser http. No
caso da configuração acima, o server aceitará arquivos de nome index.html,
index.htm e index.cgi como arquivos iniciais de uma home page.



#
# UseCanonicalName:  (new for 1.3)  With this setting turned on, whenever
# Apache needs to construct a self-referencing URL (a URL that refers back
# to the server the response is coming from) it will use ServerName and
# Port to form a "canonical" name.  With this setting off, Apache will
# use the hostname:port that the client supplied, when possible.  This
# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
#
UseCanonicalName On

Se ligada, uma pagina que por exemplo se chame
<htmlurl url="http://www.teste.com/teste/" name="http://www.teste.com/teste/"> e seja acessada como http://www.teste.com/teste
(sem o / no final) seja válida. Se desligada, ele não irá achar. 



#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

Determina em que nível o httpd irá rodar. A recomendada é a warn pois
não causa acúmulo de atividades no apache e é uma das mais usadas.



#
# If you want to use name-based virtual hosts you need to define at
# least one IP address (and port number) for them.
#
NameVirtualHost 192.168.255.108:80

Neste, configuramos o ip e porta que o servidor virtual terá. A definição
deste é que você não precisa ter vários computadores rodando http servers
neles, com apenas um você pode ter<htmlurl url=" www.teste.com" name=" www.teste.com"> e www.teste1.com, cada um
abrindo uma página diferente (em diferentes diretórios do cpu) e cada um
possuindo um ip (mas ambos apontarão para o mesmo cpu, isso se chama IP
ALIAS). 



#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
#
#<VirtualHost ip.address.of.host.some_domain.com>
#    ServerAdmin webmaster@host.some_domain.com
#    DocumentRoot /www/docs/host.some_domain.com
#    ServerName host.some_domain.com
#    ErrorLog logs/host.some_domain.com-error_log
#    CustomLog logs/host.some_domain.com-access_log common
#</VirtualHost>

<VirtualHost teste:80>
    ServerAdmin webmaster@host.some_domain.com
        DocumentRoot /vh
    ServerName teste.suptel
    ErrorLog logs/host.some_domain.com-error_log
    CustomLog logs/host.some_domain.com-access_log common
</VirtualHost>

Esta é a última mas não menos importante das configurações básicas do
apache. Ela cuida do servidor virtual e de suas configurações, sendo que o
que está comentado (com um # na frente) dá um exemplo do que deverá ser
feito (as linhas descomentadas não estão escritas por padrão, estas
apresentadas foram digitadas com base no exemplo). Explicarei cada uma
delas:

<VirtualHost teste:80>

- Valida o nome "teste" ao servidor virtual e fala em que porta ele irá
  atender (80)

ServerAdmin webmaster@host.some_domain.com

- Se o sistema detectar algo de anômalo, um mail será enviado a
  webmaster@host.some_domain.com

DocumentRoot /vh

- Designa a pasta onde os arquivos html do servidor virtual serão colocados
(LEMBRANDO QUE ESTA E DEVERÁ TER PERMISSÕES 755 EM SEU CAMINHO INTEIRO
COMO MENCIONADO ANTERIORMENTE).

ServerName teste.suptel

- Nome e dominio do servidor virtual.

ErrorLog logs/host.some_domain.com-error_log

- O relatório de erros do servidor virtual vai ser escrito em
  logs/host.some_domain.com-error_log

CustomLog logs/host.some_domain.com-access_log common

- Log de acessos vai ser escrito em logs/host.some_domain.com-access_log
  common

</VirtualHost>

- Indica o final da configuração do virtual host.

**** DEPOIS DE QUALQUER MODIFICAÇÃO NESTE ARQUIVO (INCLUSIVE NA PRIMEIRA), O
HTTPD DEVERÁ SER REINICIADO DIGITANDO COMO ROOT: ****

[root@localhost]# cds 
e após:
[root@localhost]# ./httpd restart 



Depois, é necessário informar ao sistema que o mesmo precisa responder num
outro ip (192.168.255.108 como definido nas configurações do virtual host)
além do ip verdadeiro (pois um virtual host não é nada mais do que fazer um
computador responder em outro ip (e outro nome, se assim especificado no
dns), direcionando o pedido http para este ip "falso" e associando a pasta
de htmls referida ao mesmo).

Vamos utilizar então o linuxconf para adicionar este ip "falso" (técnica
chamada de IP ALIAS, anteriormente mencionada).

Entre como root no linuxconf:

[root@localhost]# linuxconf 

Vá em:

Ambiente de Rede -->
    Apelidos de IP para máquinas virtuais -->
                                           eth0 -->

configure o ip virtual (no caso do nosso, seria 192.168.255.108) e sua
máscara.
Depois:
    
      Aceitar
     Sair
    Sair
   Sair
  Ativar as mudanças

Confirme se o novo ip está realmente online usando o comando ping:

[root@localhost]# ping 192.168.255.108 

Coloque algum documento html no diretório /html (que de acordo com a
configuração feita, é a pasta do server principal, podendo ter subpastas
dentro desta) e em /vh (configurada para o virtualhost "teste" e que também
pode ter subpastas), todas com as devidas permissões 755 previamente
mencionadas.

E, para acessá-los, digite em um browser:

<htmlurl url="http://vader.suptel" name="http://vader.suptel"> (para o principal já que o nome é o do servidor principal)

ou:

<htmlurl url="http://teste" name="http://teste"> (que é o nome do virtual host)

O primeiro tem que estar respondendo no documento html válido na pasta /html
e o segundo na /vh.

Para uma página no home do usuário, digite (após o usuário ter criado a pasta
public_html em seu home e ter dado permissões 755 para a mesma).

<htmlurl url="http://nome-da-maquina/~nome-do-usuário" name="http://nome-da-maquina/~nome-do-usuário"> (deve responder no html do diretório
/home/nome-do-usuário/public_html)



**** Configurando o apache via linuxconf ****

Pode-se também configurar httpd pelo linuxconf ao invés de fazê-lo
manualmente (que apesar de ser mais difícil, é mais garantido) A primeira
coisa a se fazer é verificar se o módulo referente ao apache no linuxconf
está ativado. Uma vez dentro do linuxconf entre em :

Arquivos de controle e sistemas -->
    Configurar os módulos do Configurador Linux -->
                                Marque o módulo do apache
                             Aceitar
                          Sair
                       Sair
                    Ativar as Mudanças

Após, entre novamente no linuxconf e vá em:

Ambiente de rede -->
    Apache - servidor www -->
                        Padrões -->

Os campos mais importantes serão explicados abaixo:

- Endereço email do administrador : Para onde o mail mandado automaticamente
se houver irregularidades será mandado.

- Domain IP address : endereço ip do dominio (do servidor principal)

- Nome do servidor: um nome válido em dns do servidor principal

- Diretório raiz dos documentos : onde serão lidos os htmls do servidor
  principal

- Registros de transferências, Registros de agentes, Registros de
  referência: logs do sistema, cujo caminho opcionalmente pode ser especificado
aqui.

- Escutando na porta : porta onde o servidor principal vai responder (padrão
  é 80)

- Tempo máximo de espera da conexão : Mesmo que "Timeout" mencionado durante
  as configurações do http.conf

- Funcionalidades: neste encontram-se algumas opções que estão explicadas e
  poderão ser marcadas de acordo com a necessidade.

Depois de sair desta seção aceitando as configurações ou cancelando,
voltamos a tela de menu que cotem os campos. Entre em:

 Domínios Virtuais -->
            Adicionar -->

Em:

- Nome da máquina virtual: definimos o nome do máquina virtual em que o
  servidor virtual irá rodar.

- Endereço email do administrador: para onde o mail avisando funcionamento
  anômalo será mandado.

- Domain IP address: O ip do Servidor Virtual.

- Diretório raiz dos documentos: pasta onde os documentos html estarão (no
  caso, foi anteriormente configurado no httpd.conf que seria em /vh).

- Nomes alternativos de servidor: seria um apelido para este servidor
  virtual

- Funcionalidades: opções relativas a este servidor virtual.

Depois de aceitar ou cancelar estar opções, voltamos ao menu do apache.
Entre desta vez em :

  Especificações de subdiretórios -->

Aqui encontramos onde os documentos do servidor principal ficarão (inclui
ícones, htmls e cgis). Depois de Sair ou Aceitar estas opções, entre em:

  Modules -->

Neste campo você poderá adicionar ou retirar módulos relativos ao apache
(aumentando as suas funções ou restringindo-as).

Voltando ao menu principal do apache, vá agora em:

  Performance -->

Em:

- Inicia servidores: numero de servidores que iniciam logo no boot do httpd
  (um exemplo e uma explicação sobre isso foi passada anteriormente quando
foi configurado o httpd.conf)

- Núm máx de clientes por servidores, Núm máx de req. por processo filho,
  Núm mín de serv. aguardando conexão, Núm máx de serv. aguardando conexão:
pode-se regular o numero de servidores, clientes e processos filhos (que
foram originados de um processo maior, no caso o servidor principal).

- Keeps Alive: nesta seção pode-se ligar ou desligar o suporte a este
  recurso, o maximo de pedidos e quanto após quanto tempo o mesmo expira.

- Tempo máximo de espera da conexão: Seria o "timeout" explicado
  anteriormente nas configurações do httpd.conf.

Depois de todos estes campos configurados, saia do linuxconf ativando as
mudanças. Os teste para saber se o mesmo está funcionando são os mesmos
mencionados anteriormente quando terminamos de editar o arquivo httpd.conf.


Estes são os tópicos básicos do servidor http apache pois o mesmo possui
ainda outros recursos como ssl (conexão segura) entre outros, mas as
configurações detalhadas neste documento já são suficientes para executá-lo.

68.2 Como faço para o apache abrir um diretório, sem conter o index.html?

Basta editar o arquivo de configuração do apache /etc/httpd/conf/httpd.conf, que pode ser aberto com o comando:

[root@localhost]# mcedit /etc/httpd/conf/httpd.conf

Inclua a opção Indexes, conforme o exemplo abaixo:

<Directory "/html">

Options Indexes FollowSymLinks Includes

</Directory>


Página seguinte Página anterior Índice