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.