BOMBOLOM.COM

(http) Instalação e Configuração do Apache no Debian

Neste artigo descreve-se a forma de instalar o Apache no Debian.

Instalação

O processo de instalação não podia ser mais simples. Como root executar o seguinte comando:

# apt-get install apache2

E já está! Devemos ter um servidor de http a funcionar. Para testar podemos aceder a um browser e aponta-lo para:

http://<endereço do servidor>

Configuração

Neste momento temos um servidor Apache configurado e a funcionar. Resta-nos compreender como se estrutura este servidor, em termos de organização de directorias, ficheiros de configuração, etc...

Vamos então abordar os seguintes temas:

Iniciar e parar o servidor

Para iniciar e parar o servidor utiliza-se o script /etc/init.d/apache2.

# /etc/init.d/apache2
Usage: /etc/init.d/apache2 {start|stop|restart|reload|force-reload}

Configuração do servidor

Os ficheiros de configuração do servidor encontram-se em /etc/apache2. Neste local temos a seguinte árvore de directorias:

</etc/apache2>      (1)
|-- conf.d          (2)
|-- mods-available  (3)
|-- mods-enabled
|-- sites-available (4)
`-- sites-enabled
  1. Na directoria base temos os ficheiros essenciais de configuração:
    • apache2.conf - Configuração geral do servidor. Neste ficheiro definem-se todos os parâmetros que afinam o funcionamento geral do servidor, por exemplo, controlo dos processos do próprio servidor, directivas de definição do servidor por omissão, etc.

      É também a partir deste ficheiro que são incluídos os restantes ficheiros de configuração que se encontram nesta árvore de directorias.

      Por enquanto não vamos ter necessidade de alterar definições neste ficheiro;

    • envvars - variáveis de ambiente a serem utilizadas pelo processo de controlo do servidor. Na configuração por omissão este ficheiro só tem comentários, ou seja, não é utilizado;
    • ports.conf - definição das portas que o servidor vai escutar. Por omissão o servidor utiliza a porta 80;
    • httpd.conf - este ficheiro é utilizado na distribuição do Apache para guardar configurações do servidor, muito à semelhança do ficheiro apache2.conf referido acima. No Debian, no entanto, este ficheiro está vazio, logo não serve nenhuma função. Creio que a inclusão deste ficheiro na distribuição se deve a razões de compatibilidade com versões anteriores, mas não tenho a certeza.
  2. Na directoria conf.d são incluídos pequenos ficheiros de configuração para opções específicas.

    Na instalação por omissão, temos apenas um ficheiro, charset, onde se define o conjunto de caracteres a utilizar no servidor. Por omissão é definido o UTF-8, que é uma boa opção. Notar, no entanto, que muitos editores no Windows ainda utilizam o ISO 8859-1 (latin 1) pelo que se deve de ter em atenção a codificação utilizada.

    Como o ficheiro apache2.conf incluí toda a directoria, podemos incluir aqui outros snippets de configuração que possam ser úteis.

  3. Na directoria mods-available temos, como o nome indica, ficheiros que identificam os módulos disponíveis (os módulos no Apache podem ser considerados como plugins que extendem a funcionalidade do sistema). Cada um desses ficheiros contém as directivas de configuração necessárias para carregar o módulo no Apache. Por exemplo o módulo que proporciona os SSI (Server Side Includes) é carregado com a directiva:
    LoadModule include_module /usr/lib/apache2/modules/mod_include.so

    Que reside no ficheiro include.load.

    Notar no entanto que esta directoria não é incluída pelo apache2.conf, nem por qualquer outro ficheiro de configuração. Esta directoria serve apenas para armazenar estas configurações. Assim, por si só, estes ficheiros não têm qualquer tipo de influência na configuração do servidor.

    A directoria que é incluída na configuração do Apache é a mods-enabled. Cada módulo que está activado tem um link simbólico da directoria mods-available para mods-enabled.

    Se examinarmos a directoria mods-enabled, constata-se que, por omissão, estão activados vários módulos cuja função, com o tempo, se vai tornar clara. Naturalmente, pode-se sempre consultar a documentação do Apache para descobrir a função destes módulos.

  4. Finalmente temos o par de directorias sites-available e sites-enabled. A filosofia é a mesma que temos para as directorias dos módulos. Em sites-available deveremos guardar as definições de cada site virtual, e em sites-enabled temos links simbólicos para a primeira directoria. Da mesma forma, como apenas a directoria sites-available é incluída na configuração do servidor, apenas os sites que estiverem aqui definidos serão activados.

    Notar que por omissão é definido um site (o ficheiro de configuração é 000-default), que se pode utilizar como base para a construção dos outros servidores virtuais.

Parênteses sobre o esquema de configuração de outras distribuições

Notar, que em qualquer distribuição, a configuração do Apache se faz da mesma forma (afinal de contas o software é feito apenas por uma organização!). O que varia é a forma como se distribuem os ficheiros de configuração.

No limite poderíamos ter apenas um único ficheiro de configuração (se bem que a manutenção desse ficheiro seria um pouco difícil para qualquer servidor que faça qualquer coisa que ultrapasse o trivial).

Assim, se estivermos perante um sistema que utilize outro esquema de configuração, o que devemos fazer é:

  1. Identificar a directoria de configuração básica, esta pode ser qualquer coisa como /etc/apache, /etc/http, etc... Neste ponto ajuda examinar os ficheiros que fazem parte d distribuição. Em sistemas que utilizem o rpm (SuSE, Fedora, Mandrake, etc), basta fazer:
    $ rpm -qa | grep -e "apache\|http"
    apache2-2.0.50-7.17
    apache2-doc-2.0.50-7.2
    apache2-devel-2.0.50-7.12 [etc...]

    O pacote que contém o apache é apache2-2.0.50-7.17. Basta agora listar os ficheiros que este instalou:

    $ rpm -ql apache2-2.0.50-7.17

    Este exemplo é para o SuSE.

  2. Depois de identificada a directoria de configuração, deveremos identificar o ficheiro principal de configuração, no caso do SuSE, o ficheiro é /etc/apache2/httpd.conf;
  3. A partir do ficheiro de configuração vamos ver quais são os ficheiros extra incluidos (utilizando a directiva Include), de modo a compreender como se estrutura o esquema de configuração do servidor.

Fim do parênteses

Utilitários

Para gerir as directorias com as definições dos módulos e dos sites há quatro utilitários, específicos do Debian, que facilitam a inclusão e exclusão de módulos e de sites.

Para os módulos temos:

Para os sites temos:

Criar um site virtual

Num mesmo servidor podemos ter definidos vários sites virtuais. O servidor Apache pode identificar qual o site a mostrar utilizando dois métodos, (i) por endereço IP, ou seja na mesma máquina temos vários endereços IP expostos às redes a que queremos dar acesso, (ii) ou então em função do nome do site, e.g., http://www.site1.com e http://www.site2.com, os URLs do exemplo podem resolver para o mesmo endereço IP.

Antes de apresentar a configuração do site, convém criar a árvore de directorias onde vamos armazenar o site. Eu gosto de manter todos os meus sites na directoria /arquivo/www. Os processos do Apache correm, no Debian, com o utilizador www-data, isto pode-se confirmar facilmente:

# grep -e "^User\|^Group" /etc/apache2/apache2.conf
User www-data
Group www-data

De modo a que o processo do Apache tenha acesso às directorias onde o site está alojado, estas têm de permissões adequadas, i.e., o utilizador www-data tem de conseguir ler estas directorias. Poderíamos pura e simplesmente dar acesso de leitura a toda a gente mas, cultivando uma paranóia salutar em relação à segurança, vamos sempre dar as permissões mínimas necessárias de modo a que possamos atingir o nosso objectivo.

A árvore de directorias que costumo criar por cima de /arquivo/www para alojar os sites é:

/arquivo/www
|-- logs
`-- site1
    |-- cgi-bin
    `-- htdocs

A função de cada uma das directorias é:

Para criarmos esta árvore de directorias faz-se:

# mkdir -p /arquivo/www/logs
# cd /arquivo/www
# mkdir site1
# cd site1
# mkdir cgi-bin htdocs

As permissões e ownership vêm:

# chown -R www-data:www-data /arquivo/www
# chmod -R u+rwx,g+wrs,o-rwx /arquivo/www

Notar que este arranjo de permissões não pode ser utilizado se não confiarmos nos utilizadores que vão editar os sites (que vão ter de pertencer ao grupo www-data). No caso de querermos alojar sites de terceiros, convém guardar esses sites directamente nas respectivas home directories destes utilizadores. Nesse caso temos de dar acesso de leitura ao processo do Apache o que implica dar permissões aos "outros" de leitura. No caso deste exemplo assumo que os sites são geridos pelo próprio administrador do sistema ou por uma pessoa em que este confie.

Uma vez criada a estrutura de directorias de suport ao site, resta-nos criar o ficheiro de configuração do site:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin sysadm@site1.com
    DocumentRoot /arquivo/www/site1/htdocs
    ServerName site1.com
    ServerAlias www.site1.com

    ErrorLog /arquivo/www/logs/site1_error.log
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-agent}i\"" my_custom_log
    CustomLog /arquivo/www/site1/logs/site1_access.log  my_custom_log

    ScriptAlias /cgi-bin /arquivo/www/site1/cgi-bin

    # htdocs:
    <Directory "/arquivo/www/site1/htdocs">
        Options Indexes FollowSymLinks Includes
        # Config do htaccess
        AllowOverride All
        # Geral
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

O passo seguinte consiste em activar o site:

# a2ensite site1
Site site1 installed; run /etc/init.d/apache2 reload to enable.
# a2dissite default
Site default disabled; run /etc/init.d/apache2 reload to fully disable.

Notar que estou a desactivar o site definido por omissão no Apache, fazemos isto por dois motivos: (i) a definição do site por omissão não é um site virtual escolhido pelo URL enquanto que o nosso é, como as duas formas de aceder a sites virtuais é incompatível temos de retirar esta definição, (ii) o site por definido por omissão não segue a estrutura de sites que definimos neste documento, não faz grande sentido termos de manter estas duas estruturas.

Agora já podemos reiniciar o Apache:

# /etc/init.d/apache2 restart
Forcing reload of web server (apache2)...httpd (no pid file) not running

Já temos o nosso servidor virtual a correr!

Podemos testar o servidor visitando o URL http://<endereço do servidor>. Como o servidor virtual é identificado pelo nome isto só funciona porque apenas temos um servidor virtual definido no Apache. Outra forma de testar a utilização do servidor seria editar o ficheiro /etc/hosts e acrescentar:

<endereço do servidor> site1.com www.site1.com

Se já tivermos o domínio registado e a apontar para o nosso servidor este passo não é, obviamente, necessário.

Notas Finais

Neste momento o servidor está configurado, para acrescentar um site virtual basta duplicar o ficheiro /etc/apache2/sites-available/site1, mudar as referências ao "site1.com" para o novo site, activar o site e criar a estrutura de directorias que o vai alojar.

Neste documento não se falou na instalação de, por exemplo, do PHP ou de qualquer outra linguagem ou framework utilizada em sites dinâmicos. O procedimento é bastante simples e espero trata-lo no futuro.

A configuração por omissão no Debian cria bastantes processos do Apache. Isto é apropriado para sites com movimento de moderado a grande. Para alojar uma simples página pessoal talvez seja um bocadinho demais! Para alterar os parâmetros que controlam este comportamento devemos editar o ficheiro /etc/apache2/apache2.conf. A parte relevante é:

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Por exemplo, para um site com pouco movimento:

<IfModule mpm_worker_module>
    StartServers          1
    MaxClients          150
    MinSpareThreads      10
    MaxSpareThreads      20
    ThreadsPerChild      10
    MaxRequestsPerChild   0
</IfModule>

Finalmente, só mais uma nota sobre a manutenção da configuração aqui descrita. Devemos tentar cingir as nossas alterações às configurações o mais possível aos ficheiros onde temos definidos os nossos sites virtuais. Se procedermos deste modo facilitamos os upgrades, garantimos de alguma forma que a configuração de um site não interfere com a dos outros, etc...

Agora que temos o Apache a funcionar só nos resta criar o novo Google!

NOTA: Acrescentei um artigo sobre a configuração de ligações encriptadas com o Apache, leia aqui.

29.04.2007 | Ler mais | Comentários | Tags , , ,

Voltar à Página principal | Made with PyBlosxom