Olá Pessoal
Este é mais um daqueles artigos com foco na instalação de serviços em ambientes Linux, já que a temática teve boa aceitação pelos leitores do blog. O objetivo é listar os passos necessários para instalar o Apache, nada menos que o serviço web mais popular do mundo que é responsável pela hospedagem de mais da metade de todas as páginas web publicadas na Internet. Além de suportar requisições HTTP, o Apache também provê segurança e criptografia (via protocolo HTTPS) através do módulo mod_ssl.
Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação do pacote apache2 para que o Linux possa ser posteriormente configurado como servidor web na LAN (intranet) ou mesmo na Internet. Essa tarefa é simples e rápida através do APT:
root@webserver:/# apt-get install apache2
Uma característica interessante do Apache é que sua estrutura é modular e sua configuração envolve diferentes arquivos que ficam armazenados no diretório "/etc/apache2". Em "/etc/apache2/apache2.conf" são realizadas as configurações básicas do servidor web, inclusive o vínculo com outros arquivos. De maneira geral, o arquivo de configuração está todo comentado e fica fácil entender o que cada linha representa. Na configuração abaixo estão destacados em amarelo os pontos em que fazemos o vínculo com outros arquivos de configuração que estaremos manipulando na sequência. É crucial manter o bloco de diretórios que nega todo acesso ao sistema de arquivos do servidor na sua raíz /.
###--- em /etc/apache2/apache2.conf
(...)
Include ports.conf
(...)
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
(...)
IncludeOptional sites-enabled/*.conf
Obs.: Particularmente, não tenho o hábito de liberar acesso ao diretório "var/www" no arquivo de configuração global porque prefiro fazer a liberação do(s) diretório(s) específico(s) do(s) site(s) em um arquivo mais específico, conforme veremos adiante.
No arquivo "/etc/apache2/ports.conf" são configuradas as interfaces (através do IP) e as portas que irão responder requisições HTTP. O Apache, por padrão, responde requisições vindas na porta 80 de todas as interfaces, mas pode ser personalizado para aceitar requisições IPv4 ou IPv6 em outras portas. Nas linhas comentadas e com destaque amarelo há outras opções para permitir a escuta apenas em interfaces específicas. Outro detalhe é que somente haverá escuta na porta 443 (HTTPS) se seus módulos de segurança estiverem ativos.
###--- em /etc/apache2/ports.conf
Listen 80
#Listen 192.168.0.1:80
#Listen 203.0.113.1:80
#Listen [2001:db8:cafe::1]:80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Depois de realizadas as configurações gerais, as configurações específicas dos sites ficam armazenadas em "etc/apache2/sites-available". Para ambientes que irão hospedar múltiplos sites, é recomendada a criação de um arquivo (.conf) com o nome do domínio pelo qual cada site irá responder. Posteriormente criaremos o diretório "/var/www/nome.com.br", além de outros dois sub-diretórios "/var/www/nome.com.br/public_html" e "/var/www/nome.com.br/logs" para armazenar os arquivos do site e os arquivos de log, respectivamente.
Na configuração abaixo trago alguns dos parâmetros mais importantes, embora haja outros. De maneira breve, as linhas abaixo são repsonsáveis por definir, na sequência: o e-mail do responsável pelo site (ServerAdmin); o nome do domínio do site (ServerName); outros nomes/apelidos para o site (ServerAlias); o diretório raíz que será a base para hospedagem dos arquivos do site (DocumentRoot); definir o caminho onde vão ficar os logs de erro do serviço (ErrorLog); o caminho onde vão ficar os logs de acesso ao site (CustomLog); e o caminho para uma página de erro personalizada (ErrorDocument). Vários desses parâmetros são opcionais...
Na sequência o bloco <Directory> define características do diretório onde estarão armazenados os arquivos que compõem o site hospedado. Em síntese, estamos permitindo que o usuário possa navegar/visualizar os diretórios (options indexes), negando que outras regras mais específicas conflitem com essas configurações (allowoverride none) e permitindo acesso aos arquivos (granted).
###--- em /etc/apache2/sites-available/nome.com.br.conf
<VirtualHost *:80>
ServerAdmin webmaster@nome.com.br
ServerName nome.com.br
ServerAlias www.nome.com.br
DocumentRoot /var/www/nome.com.br/public_html
ErrorLog /var/www/nome.com.br/logs/error.log
CustomLog /var/www/nome.com.br/logs/access.log combined
ErrorDocument 404 /error.htm
<Directory /var/www/nome.com.br/public_html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Os arquivos dos sites que ficam armazenados em "/etc/apache2/sites-available" não estão publicados, por isso é necessário utilizar a ferramenta a2ensite para ativá-los e publicá-los através da criação de um link simbólico no diretório "/etc/apache2/sites-enabled".
root@webserver:/# a2ensite nome.com.br.config
root@webserver:/# ls -l /etc/apache2/sites-enabled
lrwxrwxrwx 1 root root 38 Mai 14 23:49 nome.com.br.conf -> ../sites-available/nome.com.br.conf
Obs.: Assim como a ferramenta a2ensite é utilizada para ativar e publicar um site, a ferramenta a2dissite pode ser utilizada para remover o link simbólico.
Respeitando os caminhos informados na configuração anterior, devem ser criados os diretórios para armazenamento da página web. O diretório-raíz da hospedagem deve conter o arquivo padrão index.htm para efetivamente exibir algo aos clientes.
root@webserver:/# mkdir /var/www/nome.com.br
root@webserver:/# mkdir /var/www/nome.com.br/public_html
root@webserver:/# mkdir /var/www/nome.com.br/logs
root@webserver:/# chmod 755 –R /var/www/nome.com.br
Por fim, depois de configurado o servidor, basta iniciar o serviço para validar todas as configurações realizadas anteriormente. A partir de agora o site hospedado no servidor pode ser acessado pelos clientes através de navegadores.
root@webserver:/# service apache2 start
* Starting web server apache2
*
Obs.: Quando um novo serviço é instalado no Debian, ele passa a ser automaticamente inicializado em caso de boot do servidor. A ferramenta update-rc.d pode ser utilizada para remover/adicionar serviços no processo de inicialização automática.
Nesse ponto o servidor web já está devidamente configurado e operando como deveria. Um recurso adicional que pode ser útil é a solicitação de autenticação dos usuários que tentem acessar o conteúdo de um determinado diretório protegido. Vamos imaginar que temos um diretório privado localizado em "/var/www/nome.com.br/public_html/private". Para protegê-lo é necessário editar novamente o arquivo "/etc/apache2/sites-available/nome.com.br.conf" e adicionar as seguintes linhas:
<VirtualHost *:80>
(...) Conteúdo Omitido
<Directory /var/www/nome.com.br/public_html/private>
AuthName "ACESSO RESTRITO"
AuthType Basic
AuthUserFile /etc/apache2/passwd.apache
require valid-user
</Directory>
Pronto, agora basta criar o arquivo destacado em amarelo que irá conter a relação de usuários e senhas que podem ter acesso ao diretório protegido. Por fim, iremos recarregar as novas configurações do Apache!
root@webserver:/# mkdir /var/www/nome.com.br/public_html/private
root@webserver:/# touch /etc/apache2/passwd.apache
root@webserver:/# htpasswd /etc/apache2/passwd.apache nome_usuario
<informar senha>
root@webserver:/# service apache2 reload
Samuel.
Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação do pacote apache2 para que o Linux possa ser posteriormente configurado como servidor web na LAN (intranet) ou mesmo na Internet. Essa tarefa é simples e rápida através do APT:
root@webserver:/# apt-get install apache2
Uma característica interessante do Apache é que sua estrutura é modular e sua configuração envolve diferentes arquivos que ficam armazenados no diretório "/etc/apache2". Em "/etc/apache2/apache2.conf" são realizadas as configurações básicas do servidor web, inclusive o vínculo com outros arquivos. De maneira geral, o arquivo de configuração está todo comentado e fica fácil entender o que cada linha representa. Na configuração abaixo estão destacados em amarelo os pontos em que fazemos o vínculo com outros arquivos de configuração que estaremos manipulando na sequência. É crucial manter o bloco de diretórios que nega todo acesso ao sistema de arquivos do servidor na sua raíz /.
###--- em /etc/apache2/apache2.conf
(...)
Include ports.conf
(...)
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
(...)
IncludeOptional sites-enabled/*.conf
Obs.: Particularmente, não tenho o hábito de liberar acesso ao diretório "var/www" no arquivo de configuração global porque prefiro fazer a liberação do(s) diretório(s) específico(s) do(s) site(s) em um arquivo mais específico, conforme veremos adiante.
No arquivo "/etc/apache2/ports.conf" são configuradas as interfaces (através do IP) e as portas que irão responder requisições HTTP. O Apache, por padrão, responde requisições vindas na porta 80 de todas as interfaces, mas pode ser personalizado para aceitar requisições IPv4 ou IPv6 em outras portas. Nas linhas comentadas e com destaque amarelo há outras opções para permitir a escuta apenas em interfaces específicas. Outro detalhe é que somente haverá escuta na porta 443 (HTTPS) se seus módulos de segurança estiverem ativos.
###--- em /etc/apache2/ports.conf
Listen 80
#Listen 192.168.0.1:80
#Listen 203.0.113.1:80
#Listen [2001:db8:cafe::1]:80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Depois de realizadas as configurações gerais, as configurações específicas dos sites ficam armazenadas em "etc/apache2/sites-available". Para ambientes que irão hospedar múltiplos sites, é recomendada a criação de um arquivo (.conf) com o nome do domínio pelo qual cada site irá responder. Posteriormente criaremos o diretório "/var/www/nome.com.br", além de outros dois sub-diretórios "/var/www/nome.com.br/public_html" e "/var/www/nome.com.br/logs" para armazenar os arquivos do site e os arquivos de log, respectivamente.
Na configuração abaixo trago alguns dos parâmetros mais importantes, embora haja outros. De maneira breve, as linhas abaixo são repsonsáveis por definir, na sequência: o e-mail do responsável pelo site (ServerAdmin); o nome do domínio do site (ServerName); outros nomes/apelidos para o site (ServerAlias); o diretório raíz que será a base para hospedagem dos arquivos do site (DocumentRoot); definir o caminho onde vão ficar os logs de erro do serviço (ErrorLog); o caminho onde vão ficar os logs de acesso ao site (CustomLog); e o caminho para uma página de erro personalizada (ErrorDocument). Vários desses parâmetros são opcionais...
Na sequência o bloco <Directory> define características do diretório onde estarão armazenados os arquivos que compõem o site hospedado. Em síntese, estamos permitindo que o usuário possa navegar/visualizar os diretórios (options indexes), negando que outras regras mais específicas conflitem com essas configurações (allowoverride none) e permitindo acesso aos arquivos (granted).
###--- em /etc/apache2/sites-available/nome.com.br.conf
<VirtualHost *:80>
ServerAdmin webmaster@nome.com.br
ServerName nome.com.br
ServerAlias www.nome.com.br
DocumentRoot /var/www/nome.com.br/public_html
ErrorLog /var/www/nome.com.br/logs/error.log
CustomLog /var/www/nome.com.br/logs/access.log combined
ErrorDocument 404 /error.htm
<Directory /var/www/nome.com.br/public_html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Os arquivos dos sites que ficam armazenados em "/etc/apache2/sites-available" não estão publicados, por isso é necessário utilizar a ferramenta a2ensite para ativá-los e publicá-los através da criação de um link simbólico no diretório "/etc/apache2/sites-enabled".
root@webserver:/# a2ensite nome.com.br.config
root@webserver:/# ls -l /etc/apache2/sites-enabled
lrwxrwxrwx 1 root root 38 Mai 14 23:49 nome.com.br.conf -> ../sites-available/nome.com.br.conf
Obs.: Assim como a ferramenta a2ensite é utilizada para ativar e publicar um site, a ferramenta a2dissite pode ser utilizada para remover o link simbólico.
Respeitando os caminhos informados na configuração anterior, devem ser criados os diretórios para armazenamento da página web. O diretório-raíz da hospedagem deve conter o arquivo padrão index.htm para efetivamente exibir algo aos clientes.
root@webserver:/# mkdir /var/www/nome.com.br
root@webserver:/# mkdir /var/www/nome.com.br/public_html
root@webserver:/# mkdir /var/www/nome.com.br/logs
root@webserver:/# chmod 755 –R /var/www/nome.com.br
Por fim, depois de configurado o servidor, basta iniciar o serviço para validar todas as configurações realizadas anteriormente. A partir de agora o site hospedado no servidor pode ser acessado pelos clientes através de navegadores.
root@webserver:/# service apache2 start
* Starting web server apache2
*
Obs.: Quando um novo serviço é instalado no Debian, ele passa a ser automaticamente inicializado em caso de boot do servidor. A ferramenta update-rc.d pode ser utilizada para remover/adicionar serviços no processo de inicialização automática.
Nesse ponto o servidor web já está devidamente configurado e operando como deveria. Um recurso adicional que pode ser útil é a solicitação de autenticação dos usuários que tentem acessar o conteúdo de um determinado diretório protegido. Vamos imaginar que temos um diretório privado localizado em "/var/www/nome.com.br/public_html/private". Para protegê-lo é necessário editar novamente o arquivo "/etc/apache2/sites-available/nome.com.br.conf" e adicionar as seguintes linhas:
<VirtualHost *:80>
(...) Conteúdo Omitido
<Directory /var/www/nome.com.br/public_html/private>
AuthName "ACESSO RESTRITO"
AuthType Basic
AuthUserFile /etc/apache2/passwd.apache
require valid-user
</Directory>
Pronto, agora basta criar o arquivo destacado em amarelo que irá conter a relação de usuários e senhas que podem ter acesso ao diretório protegido. Por fim, iremos recarregar as novas configurações do Apache!
root@webserver:/# mkdir /var/www/nome.com.br/public_html/private
root@webserver:/# touch /etc/apache2/passwd.apache
root@webserver:/# htpasswd /etc/apache2/passwd.apache nome_usuario
<informar senha>
root@webserver:/# service apache2 reload
Samuel.
Como sempre, excelentes tutoriais!
ResponderExcluirEXCELENTE TUTORIAL. PARABÉNS!
ResponderExcluirUma explicação concisa, clara e efetiva. Fiz todos os passos e funcionou perfeitamente.
ResponderExcluirParabéns!!
Muito bom, porem, ainda falta muita experiencia de minha parte. Pois é a primeira vez que estou tentando fazer. Mas valeu muito. Grato Fernando
ResponderExcluirExcelente Tutorial, passei um monte de raiva com outros tutoriais e esse funcionou na hora
ResponderExcluirvaleu
ResponderExcluir