kb.erickguedes.com
Apache HTTP Server: Configuração e Administração

Instalação e VirtualHosts

Aula 1 de 5

Instalação do Apache

Instalação via apt (Debian/Ubuntu)

# Atualizar repositórios e instalar
sudo apt update
sudo apt install apache2 -y

# Verificar status
sudo systemctl status apache2
sudo systemctl enable apache2

# Verificar versão
apache2 -v

Instalação via yum (RHEL/CentOS/Rocky)

# Instalar Apache
sudo yum install httpd -y

# Iniciar e habilitar
sudo systemctl start httpd
sudo systemctl enable httpd

# Firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

Compilação a partir do fonte

# Dependências
sudo apt install build-essential libapr1-dev libaprutil1-dev libpcre3-dev zlib1g-dev openssl libssl-dev -y

# Download e compilação
cd /usr/src
sudo wget https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.gz
sudo tar -xzf httpd-2.4.62.tar.gz
cd httpd-2.4.62
sudo ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl --enable-rewrite --enable-proxy
sudo make && sudo make install

# Iniciar
sudo /usr/local/apache2/bin/apachectl start

Estrutura de Diretórios

# Debian/Ubuntu
/etc/apache2/
├── apache2.conf           # Configuração principal
├── ports.conf              # Portas (Listen)
├── sites-available/        # VirtualHosts disponíveis
├── sites-enabled/          # VirtualHosts ativos
├── mods-available/         # Módulos disponíveis
├── mods-enabled/           # Módulos ativos
└── conf-available/         # Configurações extras

/var/www/html/              # DocumentRoot padrão
# RHEL/CentOS
/etc/httpd/
├── conf/httpd.conf         # Configuração principal
├── conf.d/                 # Configurações extras
├── conf.modules.d/         # Módulos
└── logs/                   # Logs

/var/www/html/              # DocumentRoot padrão

Configuração Básica - httpd.conf / apache2.conf

# Diretivas essenciais em /etc/apache2/apache2.conf
ServerRoot "/etc/apache2"
ServerName 192.168.1.100:80
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User www-data
Group www-data
# ports.conf - Configuração de portas
Listen 80
Listen 443

<IfModule ssl_module>
    Listen 443
</IfModule>
# DocumentRoot e Directory
DocumentRoot "/var/www/html"

<Directory "/var/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

VirtualHosts - Name-based

# /etc/apache2/sites-available/site1.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName site1.com
    ServerAlias www.site1.com

    DocumentRoot /var/www/site1

    <Directory /var/www/site1>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>
# /etc/apache2/sites-available/site2.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName site2.com
    DocumentRoot /var/www/site2

    <Directory /var/www/site2>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>
# Habilitar sites e recarregar
sudo a2ensite site1.conf
sudo a2ensite site2.conf
sudo systemctl reload apache2

VirtualHosts - IP-based

# Configuração para múltiplos IPs
<VirtualHost 192.168.1.10:80>
    ServerName site1.com
    DocumentRoot /var/www/site1
</VirtualHost>

<VirtualHost 192.168.1.11:80>
    ServerName site2.com
    DocumentRoot /var/www/site2
</VirtualHost>

Diretivas Directory

# Controle de acesso detalhado
<Directory /var/www/admin>
    Options -Indexes -FollowSymLinks
    AllowOverride None
    Require ip 192.168.1.0/24
    Require local
</Directory>

<Directory /var/www/public>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

<DirectoryMatch "/\.git">
    Require all denied
</DirectoryMatch>

Lab: Servidor Apache com Múltiplos Sites

Crie dois VirtualHosts para domínios diferentes no mesmo servidor.

# 1. Criar diretórios dos sites
sudo mkdir -p /var/www/site1 /var/www/site2

# 2. Criar páginas index
echo "<h1>Site 1 - Apache</h1>" | sudo tee /var/www/site1/index.html
echo "<h1>Site 2 - Apache</h1>" | sudo tee /var/www/site2/index.html

# 3. Ajustar permissões
sudo chown -R www-data:www-data /var/www/site1 /var/www/site2
sudo chmod -R 755 /var/www/site1 /var/www/site2

# 4. Criar configurações de VirtualHost
# (usar os blocos de configuração acima)

# 5. Habilitar sites
sudo a2ensite site1.conf
sudo a2ensite site2.conf
sudo a2dissite 000-default.conf

# 6. Testar configuração
sudo apache2ctl configtest

# 7. Recarregar
sudo systemctl reload apache2

# 8. Testar com curl
curl -H "Host: site1.com" http://localhost
curl -H "Host: site2.com" http://localhost

VirtualHosts bem configurados são a base de um servidor Apache organizado e escalável. Separe cada site em seu próprio arquivo de configuração para facilitar manutenção.