Configurar domínios virtuais do Apache em máquina Linux/Debian

Publicado: 27/05/2011 em Linux, Programação, Serviços IP
Tags:,

1) Manual de comandos do Apache2 e Helps

Existem diversas maneiras de adquirir informações de qualidade quanto ao funcionamento do servidor de páginas Apache.  Abaixo disponibilizamos algumas que acreditamos ser de muita relevância:

a) Uma lista dos comandos disponíveis do Apache podem ser vistos a partir do seu manual, com o uso de um terminal:

# man apache2

b) O README do Apache para o Debian, que é encontrado de forma compactada em /usr/share/doc/apache2.2-common/README.Debian.gz . Baixe o arquivo, descompacte-o ($ gunzip README.Debian.gz) e boa leitura.

c) É muito prático instalar a documentação completa do Apache na máquina local.  Para isto, utilize o Synaptic ou o comando através do terminal:

# apt-get install apache2-doc

O arquivo da documentação será colocado em /usr/share/doc/apache2-doc/manual/index.html, e o acesso ao mesmo pode ser feito através do navegador na URL http://localhost/manual/ .

d) O Wiki do Apache , que é muito interessante.

2) As pastas e os arquivos
Após instalar o Apache2, use o comando “whereis” para verificar onde estão os arquivos binário, fonte e os manuais do Apache:

# whereis apache2

O retorno do comando deve ser algo como:

apache2: /usr/sbin/apache2 /etc/apache2 /usr/lib/apache2 /usr/share/apache2 /usr/share/man/man8/apache2.8.gz

Onde:
* /usr/sbin/apache2 é o diretório do binário principal do apache;
* /usr/lib/apache2 é a biblioteca do apache2;
* /usr/share/apache são os objetos padrões do apache.

No Debian, o diretório padrão do Apache2 é /etc/apache2/. Os principais arquivos e diretórios de configuração são:

      • apache2.conf -> principal arquivo de configuração do Apache. Faz um include de todos os arquivos presentes no diretório conf.d/;
      • conf.d/ -> arquivos deste diretório são incluídos no arquivo apache2.conf através da linha “Include /etc/apache2/conf.d“; este é um bom local para colocar diretivas de configuração adicionais;
      • httpd.conf -> arquivo de configuração em algumas releases do apache, similar ao apache2.conf. É muito utilizado na distribuição CenTOS. No caso do Debian, é um arquivo vazio;
      • ports.conf -> arquivo responsável pelas portas no qual o servidor apache ficará escutando requisições, bem como os Ips utilizados para acessá-lo. O default de instalação do Apache são as portas 80 e 443 (se estiver com o módulo  de segurança habilitado – que permitirá https). Editando o arquivo, outras portas podem ser habilitadas, como a 8080;
      • mods-available -> este diretório contém uma série de arquivos “.load” e “.conf” . Os arquivos “.load” contém diretivas de configuração do Apache necessárias para carregar o módulo em questão.  O respectivo arquivo “.conf” contém diretivas de configuração necessárias para utilizar o módulo.
      • sites-enabled -> diretório contendo links para os arquivos existentes em sites-available, habilitando os sites. Este diretório contém links simbólicos para os arquivos em “sites-available/”, os quais contém as diretivas para os sites que foram habilitados. Não basta existir um arquivo em “sites-available/”, é necessário existir um link para ele em “sites-enabled/” para que o Apache reconheça a existência do site. O Apache usa o primeiro VirtualHost que coincide com o IP/Port como padrão para o nomeado host virtual. Portanto, o arquivo “000-default” presente no diretório “sites-enabled/” que linka à “sites-available/default” será o primeiro a ser lido. A diretiva  Include utilizada para incluir os arquivos de “sites-enabled/” ignora arquivos que:
        • não iniciam com uma letra ou número;
        • contém um caracter que não é: nem letra, nem número, nem “underscore” e nem hífem;
        • contém .dpkg
      • sites-available -> diretório no qual os arquivos de configurações do hosts (sites) ficam disponíveis, se habilitados para uso a partir de sites-enabled/ . Como “mods-available/”, exceto que ele contém diretivas de configuração para diferentes hosts virtuais que podem ser usados ​​com o Apache2. Note que o hostname não tem de corresponder exatamente com o nome do arquivo. ‘default’ é o host padrão.
Arquivos de configuração do Apache2 no Debian

Configuração do Apache2

No debian, a configuração do Apache está distribuída por diversos arquivos separados. Cada arquivo se destina a realizar um aspecto da configuração do Apache, proporcionando um processo de configuração mais organizado e claro para o usuário. Quando da instalação do Apache, automaticamente é criado o arquivo “/etc/apache2/sites-available/default”, que contém a configuração de um site “raiz”, que usa (por padrão) a pasta “/var/www” como diretório de páginas. Essa configuração é suficiente para já mostrar este site inicial.

No arquivo de configuração /etc/apache2/apache2.conf é encontrado as seguintes inclusões dos demais arquivos de configuração:

# Incluir módulos de configuração:
Include mods-enabled/*.load
Include mods-enabled/*.conf
# Incluir todas as configurações de usuários:
Include httpd.conf
# Incluir listagem de  portas
Include ports.conf
# Incluir trechos de declarações genéricas:
Include conf.d/
# Incluir configurações de hosts virtuais:
Include sites-enabled/

Caso seja encontrado algum erro durante o funcionamento do Apache, o mesmo será registrado de acordo com o designos da variável ErrorLog (que é definida em /etc/apache2/apache2.conf), como no exemplo abaixo:

ErrorLog /var/log/apache2/erro.log

3) As diretivas

É importante ter um bom conhecimento das principais diretivas do Apache.  Para isto veja o post Entendendo os Hosts Virtuais no Apache.
O arquivo de configuração do Apache é lido de cima para baixo.  Arquivos que usam “include” são considerados como aparecendo inteiramente na localidade onde aparece a diretiva Include. Assim, se existir uma mesma diretiva aparecendo duas vezes, mas com valores diferentes, a que vir por último será a que realmente terá efeito.

 

4) Configuração de domínios virtuais

Para Fazer Domínios Virtuais no Apache existem dois meios: (i) Name Based Virtual Host e (ii) IP Based Virtual Host (Dominio Virtual Baseado em Nome e Baseado em IP). Isto é, num mesmo servidor podemos ter definidos vários sites virtuais e o servidor Apache pode identificar qual o site a mostrar utilizando um dos dois métodos. Com o primeiro método, em função do nome do site, e.g., http://www.site1.com, o URL do exemplo pode resolver para o mesmo endereço IP. Com o segundo método, por endereço IP, ou seja na mesma máquina temos vários endereços IP expostos às redes a que queremos dar acesso. O mais indicado é utilizar o Name Virtual Host, pois dessa forma se utiliza somente um ip, e não um ip para cada domínio!

Vamos fazer um exercício do Apache gerenciar mais um domínio, além do domínio raiz:

Estando da pasta /etc/apache2/sites-available, copie o conteúdo do arquivo “default” para o arquivo site35 que abrigará as configurações dos nosso novo sítio:


# cd /etc/apache2/sites-available
# cp default site35

Edite o arquivo  /etc/apache2/sites-available/site35 . Abaixo um espelho do arquivo site35 após a sua edição de apontamentos para o novo sitio http://www.site35.com a ser criado..


/etc/apache2/sites-available# cat site35
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName http://www.site35.com
ServerAlias site35.com
DocumentRoot /var/www/site35


<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>


<Directory /var/www/site35>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"


<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

Algumas explicações:
1] O *:80 – nas regras acima significa que os hosts especificados rodam através de qualquer IP, pela porta 80.
2] O argumento para a diretiva container <VirtuaHost> precisa ser idêntico àquele presente em uma diretiva NameVirtualHost
3] ServerName é o nome pelo qual se deseja que o host responda.
4] ServerName default – requisições não atendidas são direcionadas a este host padrão. Isso acontece, por exemplo, se em /etc/hosts contém a denominação de um host e ele não é encontrado pelo apache na máquina.
5]Diretiva DocumentRoot – especifica onde o Apache deve procurar pelos arquivos que formam o site. O valor padrão é /var/www. Por exemplo, para o caso do host site35, indicou-se o diretório /var/www/site35/
6]Diretiva DirectoryIndex – arquivo raiz do host. Ou seja, o arquivo inicial que será mostrado quando o host for acessado pelo navegador do usuário.

Veja que para o host site35 deve ser criado o seguinte diretório e arquivo:

drwxr-xr-x 2 root root /var/www/site35
-rw-r--r-- 1 root root /var/www/site35/index.html

5) Habilitar/Desabilitar um site: ferramentas a2ensite e a2dissite

Os scripts a2ensite e a2dissite estão disponíveis no Debian para habilitar ou desabilitar sites/Virtual hosts.  O script a2ensite cria em “sites-enables” o link simbólico para o arquivo presente em “sites-availables”, que será, a partir desta ação,  incluído na configuração do Apache (após comando de reload da configuração do Apache). Já o script a2dissite desfaz esta ação, retirando este link simbólico.  Como explicado anteriormente, o site default é manuseado de forma especial: o link simbólico é chamado 000-default a fim de ser carregado primeiro.  Essa ordem é muito importante, pois quando o Apache não encontra o descritor de um domínio requisitado por um usuário, ele encaminha a requisição para ser tratada pelo primeiro site carregado (que neste caso deverá dar o tratamento relativo a  “site não encontrado”, como resposta).

Para maiores detalhes consulte o manual destes scripts através dos comandos via terminal:

# man a2ensite
# man a2dissite

Assim, no nosso exemplo, habilite o site:

# a2ensite site35

Reinicie o apache com o comando:

# /etc/init.d/apache2 reload

Se for necessário acessar estes sites com um navegador que está sendo executado a partir da própria máquina onde está instalado o Apache, deve-se alterar o arquivo /etc/hosts adicionando a seguinte entrada:

127.0.0.1 http://www.site35.com

Agora é só utilizar um navegador e constatar o funcionamento do Apache:

Deve aparecer a mensagem “It works!”.

Deve aparecer o conteúdo colcoado no arquivo “/var/www/site35/index.html”.

6) Uma primeira mensagem de erro
Logo após a instalação do Apache, quando da execução do comando de recarregar a configuração do Apache (# /etc/init.d/apache2 reload), uma primeira mensagem de erro aparece:

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Isto normalmente pode ser ignorado, pois não impede o bom funcionamento do Apache. Mas aquela mensagem significa que o daemon do Apache (httpd) não conseguiu obter um nome de host totalmente qualificado, fazendo uma pesquisa inversa no seu servidor de endereço IP. Uma alternativa para evitar estas mensagens é especificar “ServerName 127.0.0.1” no contexto do servidor global da configuração. Por exemplo, criando o arquivo /etc/apache2/conf.d/servername.local , tendo como conteúdo:

ServerName 127.0.0.1

Veja também:
1- Instalar e configurar Módulos do Apache2 no Debian
2- Entendendo os Hosts Virtuais no Apache
3- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian
4- Mapear URLs para o Sistema de Arquivos no Apache
5- Básico do Apache no Debian
6- Name-based Virtual Host Support
7- Instalando e Configurando Hosts Virtuais Apache 2
8- Wiki do Apache

Anúncios
comentários
  1. Josué disse:

    Olá! Sou iniciante e entusiasta do Linux e gostaria de parabenizá-los pelo ótimo conteúdo sobre o Apache (até agora, é o 1º artigo que li do seu blog). É o 1º artigo sobre o Apache que eu vejo que realmente explica bem sobre o assunto. É uma pena eu não ter encontrado este blog antes, pois até então eu só vi artigos vagos na Internet que só falam como instalar o serviço e mesmo assim mal e porcamente explicado.
    O seu trabalho realmente é um conteúdo de qualidade e interessado em ensinar. Continuem assim!

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s