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.