Guia de Configuração e Administração do Servidor Web Apache

Introdução aos Servidores Web

Um servidor web é um software projetado para responder a solicitações de clientes (como navegadores) na World Wide Web, entregando conteúdo, geralmente páginas HTML. O protocolo padrão para esta comunicação é o HTTP (Hypertext Transfer Protocol) ou sua versão segura, HTTPS.

Dentre os servidores web mais conhecidos estão o Apache HTTP Server, o Nginx e o Microsoft IIS. O Apache é amplamente utilizado por sua estabilidade, desempenho e grande ecossistema de módulos.

Preparando o Ambiente no Linux

Este guia utiliza um sistema baseado em RHEL/CentOS. O primeiro passo é instalar o pacote do servidor Apache e garantir que o serviço esteja operacional.

# Instalar o pacote do servidor Apache
sudo dnf install httpd -y

# Desativar temporariamente o firewall para testes
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# Desativar o SELinux (modo de teste)
sudo setenforce 0

# Iniciar e habilitar o serviço Apache na inicialização
sudo systemctl start httpd
sudo systemctl enable httpd

# Verificar o status do serviço
sudo systemctl status httpd

Após a instalação, os arquivos de configuração ficam em /etc/httpd/. A configuração principal reside em /etc/httpd/conf/httpd.conf. O diretório padrão para armazenar os arquivos do site é /var/www/html.

Configuração Básica do Apache

A configuração principal (httpd.conf) é dividida em seções globais e diretivas específicas de diretórios. Alguns parâmetros importantes incluem:

  • Listen 80: Define a porta na qual o servidor escuta conexões.
  • DocumentRoot "/var/www/html": Especifica o diretório raiz para os arquivos do site.
  • Blocos <Directory>: Controlam as permissões de acesso e o comportamento para caminhos específicos do sistema de arquivos.

Criando um Site Simples

Crie um arquivo HTML no diretório raiz padrão:

echo "<h1>Bem-vindo ao Meu Servidor</h1>" | sudo tee /var/www/html/index.html
sudo systemctl restart httpd

Acesse o site via navegador usando o endereço IP do servidor ou localhost. O comando curl http://endereço_ip também pode ser usado para testar no terminal.

Modificando o Diretório Raiz do Site

Para servir arquivos de um local diferente, por exemplo /srv/web:

# Criar o novo diretório e adicionar um arquivo
sudo mkdir -p /srv/web
echo "Conteúdo do site personalizado" | sudo tee /srv/web/index.html

# Editar a configuração principal
sudo vim /etc/httpd/conf/httpd.conf

No arquivo, localize e altere as linhas correspondentes a DocumentRoot e o bloco <Directory> associado:

DocumentRoot "/srv/web"

<Directory "/srv/web">
    AllowOverride None
    Require all granted
</Directory>

Reinicie o serviço Apache para aplicar as mudanças.

Acesso Restrito por Autenticação

É possível proteger áreas do site com autenticação básica de usuário. Primeiro, crie um arquivo de senhas:

# Instalar a ferramenta httpd-tools, se necessário
sudo dnf install httpd-tools -y

# Criar o arquivo de senhas e adicionar o primeiro usuário
sudo htpasswd -c /etc/httpd/conf.d/.htpasswd usuario1
# Você será solicitado a definir uma senha

# Adicionar usuários subsequentes (sem o flag -c)
sudo htpasswd /etc/httpd/conf.d/.htpasswd usuario2

Em seguida, configure o diretório protegido no Apache. Edite a configuração (pode ser no httpd.conf ou em um arquivo separado em conf.d):

<Directory "/srv/web/restrito">
    AuthType Basic
    AuthName "Área Restrita"
    AuthUserFile "/etc/httpd/conf.d/.htpasswd"
    Require valid-user
</Directory>

Crie o diretório restrito e um arquivo dentro dele. Após reiniciar o Apache, o acesso àquele caminho exigirá usuário e senha.

Configurando Hosts Virutais

Hosts virtuais permitem que um único servidor Apache hospede múltiplos sites. Existem três métodos principais.

Baseado em Endereço IP

Requer múltiplos endereços IP atribuídos à interface de rede do servidor. Cada site é associado a um IP difernete.

# Adicionar um endereço IP secundário temporariamente (ex: 192.168.1.101)
sudo ip addr add 192.168.1.101/24 dev eth0

# Criar diretórios e páginas para cada site
sudo mkdir -p /srv/site_ip1 /srv/site_ip2
echo "Site 1 - IP 192.168.1.100" | sudo tee /srv/site_ip1/index.html
echo "Site 2 - IP 192.168.1.101" | sudo tee /srv/site_ip2/index.html

Configure o Apache:

<VirtualHost 192.168.1.100:80>
    DocumentRoot "/srv/site_ip1"
    ServerName site1.exemplo.com
</VirtualHost>

<VirtualHost 192.168.1.101:80>
    DocumentRoot "/srv/site_ip2"
    ServerName site2.exemplo.com
</VirtualHost>

Baseado em Porta

Permite hospedar diferentes sites em portas diferentes do mesmo endereço IP. É necessário garantir que o Apache esteja ouvindo nessas portas.

# No httpd.conf, adicione as linhas Listen
Listen 8080
Listen 8081

# Crie os diretórios e conteúdo
sudo mkdir -p /srv/site_port8080 /srv/site_port8081
echo "Site na porta 8080" | sudo tee /srv/site_port8080/index.html
echo "Site na porta 8081" | sudo tee /srv/site_port8081/index.html

Configuração dos hosts virtuais:

<VirtualHost *:8080>
    DocumentRoot "/srv/site_port8080"
</VirtualHost>

<VirtualHost *:8081>
    DocumentRoot "/srv/site_port8081"
</VirtualHost>

Baseado em Nome de Domínio (Name-Based)

O método mais comum e eficiente. Diferencia os sites pelo nome de domínio solicitado no cabeçalho da requisição HTTP, permitindo que múltiplos sites compartilhem um único IP e porta.

# Criar diretórios e páginas
sudo mkdir -p /srv/dom_a /srv/dom_b
echo "Bem-vindo ao domínio A" | sudo tee /srv/dom_a/index.html
echo "Bem-vindo ao domínio B" | sudo tee /srv/dom_b/index.html

# Editar /etc/hosts para testes locais (no cliente)
# Adicione: 192.168.1.100 dom_a.local dom_b.local

Configuração do Apache:

NameVirtualHost *:80 # Pode ser necessário em versões mais antigas

<VirtualHost *:80>
    ServerName dom_a.local
    DocumentRoot "/srv/dom_a"
</VirtualHost>

<VirtualHost *:80>
    ServerName dom_b.local
    DocumentRoot "/srv/dom_b"
</VirtualHost>

Após reiniciar o Apache, as requisições para dom_a.local e dom_b.local (resolvendo para o mesmo IP) retornarão o conteúdo correto de cada site.

Tags: Apache HTTP Server Virtual Hosts Linux System Administration HTTP Protocol Server Configuration

Publicado em 6-17 06:32