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 do servidor principal
Configuração de um servidor em um domínio virtual
Habilitação de uma página hospedada no home de usuários
|
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 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 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 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
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 simultâneas 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 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 de 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., 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 http://nome
mas se o mesmo não estiver em nenhum DNS, coloque o ip
(seria 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 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
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 direitos 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
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
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:
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
Designa a pasta onde os arquivos html do servidor virtual
serão colocados (LEMBRANDO QUE ESTA DEVERÁ TER
PERMISSÕES 755 EM SEU CAMINHO INTEIRO COMO MENCIONADO
ANTERIORMENTE).
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
Indica o final da configuração do virtual
host.
IMPROTANTE: DEPOIS DE QUALQUER
MODIFICAÇÃO NESTE ARQUIVO (INCLUSIVE NA PRIMEIRA), O
HTTPD DEVERÁ SER REINICIADO DIGITANDO COMO ROOT:
[root@localhost /root]# cds
|
e após:
[root@localhost /init.d]# ./httpd stop
[root@localhost /init.d]# ./httpd start
|
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:
http://vader.suptel (para o principal já que o nome é o do servidor principal)
ou:
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).
http://nome-da-maquina/~nome-do-usuário
|
deve responder no html do diretório
/home/nome-do-usuário/public_html