Neste artigo descreve-se a forma de instalar o Apache no Debian.
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>
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:
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}
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
É 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;
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.
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.
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 é:
$ 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.
Fim do parênteses
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:
# a2enmod ssl
Os módulos disponíveis na directoria mods-available têm sempre a extensão "load", com o comando a2enmod não se deve de incluir a extensão.
Notar que o significado do comando em inglês é:
# a2dismod ssl
Como no caso do comando anterior, este comando quer dizer:
Para os sites temos:
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 é:
Se quisermos utilizar a configuração por omissão do Debian para tratamento dos registos do Apache, basta mudar a localização dos logs para /var/log/apache2/ e garantir que todos os ficheiros de registo têm a extensão .log.
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.
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.