Gerador de VirtualHost Apache
Gera bloco <VirtualHost> Apache 2.4 com ServerName, DocumentRoot, ErrorLog e RewriteEngine. Modo HTTP ou HTTPS.
VirtualHost do Apache em profundidade: HTTPS, mod_rewrite, .htaccess, MPMs e módulos
Um bloco <VirtualHost> do Apache descreve um único site servido pelo processo httpd: em qual endereço e porta ele escuta, o document root, arquivos de log, configurações opcionais de TLS e permissões por diretório. Uma única instância do Apache pode servir centenas de domínios diferentes via name-based virtual hosting, alternando o contexto pelo cabeçalho Host da requisição (ou pelo SNI em HTTPS). Apesar da ascensão do nginx, o Apache continua sendo o servidor web mais implantado em hospedagens compartilhadas e dentro de empresas, graças ao ecossistema de módulos e à flexibilidade por diretório do .htaccess.
Este gerador emite um bloco mínimo mas com formato de produção; as seções abaixo cobrem a sintaxe em detalhe, como habilitar HTTPS com Let's Encrypt, regras de rewrite, os trade-offs do .htaccess, os três MPMs principais (prefork/worker/event), módulos úteis, convenções de arquivos por distribuição e como o Apache se compara com o nginx.
Sintaxe básica
<VirtualHost *:80>
ServerName exemplo.com
ServerAlias www.exemplo.com
DocumentRoot /var/www/exemplo.com/public
ErrorLog ${APACHE_LOG_DIR}/exemplo.com_error.log
CustomLog ${APACHE_LOG_DIR}/exemplo.com_access.log combined
<Directory /var/www/exemplo.com/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
ServerName é o host canônico; ServerAlias adiciona nomes extras. AllowOverride All permite que arquivos .htaccess sobrescrevam configurações por diretório; em produção, restrinja a diretivas específicas por performance. Require all granted é o substituto no Apache 2.4 para o antigo Order allow,deny / Allow from all.
HTTPS com Let's Encrypt
<VirtualHost *:443>
ServerName exemplo.com
DocumentRoot /var/www/exemplo.com/public
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/exemplo.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/exemplo.com/privkey.pem
SSLProtocol -all +TLSv1.2 +TLSv1.3
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>
Rode sudo certbot --apache -d exemplo.com -d www.exemplo.com para provisionar o certificado; o certbot edita o VirtualHost e instala um timer de renovação.
mod_rewrite: forçar HTTPS e URLs amigáveis
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Front controller (frameworks PHP)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
[L] interrompe o processamento das próximas regras na mesma passada; [R=301] emite redirect permanente. Teste rewrites no staging — erros podem gerar loops infinitos que o mod_rewrite acaba quebrando com um 500.
.htaccess vs config central
Arquivos .htaccess aplicam diretivas por diretório e são lidos em toda requisição, por todos os diretórios pais até o DocumentRoot. São convenientes em hospedagem compartilhada, onde o usuário não pode editar o config principal, mas custam performance: cada caminho percorrido gera uma chamada stat. Em seu próprio servidor, prefira AllowOverride None globalmente e mova as regras para dentro de <Directory> no config principal. As diretivas aceitas dependem das classes de AllowOverride: AuthConfig, FileInfo, Indexes, Limit, Options.
MPMs: prefork, worker, event
- prefork — um processo por requisição, sem threads. Exigido pelo antigo
mod_phpporque o PHP não é thread-safe. É o mais lento e o que mais consome memória. - worker — multi-threaded, menos processos. Suporta de 2 a 4x mais conexões simultâneas por GB de RAM que o prefork.
- event — padrão desde a 2.4; igual ao worker mais threads dedicadas para conexões
keep-aliveociosas. A melhor escolha, a menos que algum módulo específico force prefork.
Para PHP, rode php-fpm através de mod_proxy_fcgi em vez de mod_php — você ganha o MPM event e o mesmo isolamento de um nginx + PHP-FPM.
Módulos úteis
mod_rewrite— reescrita de URLs e redirecionamentos condicionais.mod_ssl— terminação TLS.mod_headers— adicionar, anexar ou remover headers de resposta (HSTS, CSP, CORS).mod_proxy,mod_proxy_http,mod_proxy_balancer— reverse proxy e balanceamento.mod_security— Web Application Firewall (WAF) com o OWASP Core Rule Set.mod_status,mod_cache,mod_deflate— observabilidade, cache de resposta e compressão gzip.
Layout de arquivos e reload
No Debian e Ubuntu, coloque cada VirtualHost em /etc/apache2/sites-available/<nome>.conf e ative com sudo a2ensite <nome> (que cria um symlink em sites-enabled). No RHEL, Fedora e Alpine, os arquivos ficam direto em /etc/httpd/conf.d/. Sempre teste antes de recarregar:
sudo apachectl configtest # equivalente a apache2ctl -t
sudo systemctl reload apache2 # Debian/Ubuntu
sudo systemctl reload httpd # RHEL/Fedora
FAQ
O .htaccess prejudica a performance? Sim — toda requisição dispara uma busca por diretório. Desative em produção com AllowOverride None no DocumentRoot principal; em hospedagem compartilhada onde você não pode editar o config principal, mantenha.
Como conseguir HTTPS rapidamente? Apache 2.4 + Let's Encrypt: sudo apt install certbot python3-certbot-apache e depois sudo certbot --apache. Edita o VirtualHost e instala um cert de 90 dias com renovação automática.
O Apache suporta HTTP/2? Sim, desde 2.4.17 via mod_http2. Adicione Protocols h2 http/1.1 ao VirtualHost HTTPS. HTTP/3 (QUIC) ainda é experimental na 2.4.x — a maioria dos times coloca nginx ou um CDN na frente para QUIC.
Apache vs nginx? Apache se destaca na configurabilidade por diretório e na riqueza de módulos (especialmente mod_security para WAF). nginx vence em concorrência crua e throughput de arquivos estáticos. É comum um híbrido onde o nginx termina TLS e faz proxy para o Apache.
Meu VirtualHost está sendo ignorado — por quê? O primeiro bloco no primeiro config é o default implícito. Verifique que Listen 80 bate com o *:80 do seu bloco, que NameVirtualHost não está duplicando a diretiva (legado, removida na 2.4) e que o ServerName casa com o Host que você está enviando.
Ferramentas Relacionadas
Gerador .htpasswd Multi-Algoritmo
Cria arquivos .htpasswd para Apache e Nginx com bcrypt, APR1, SHA-256, SHA-512 ou crypt, com múltiplos usuários em uma única exportação.
Gerador de RewriteRule (.htaccess)
Gera regras RewriteRule (mod_rewrite) para .htaccess. Inclui flag [L,R=301,QSA] e suporte a regex com grupos de captura.
Gerador de Redirect (.htaccess)
Gera regras de redirecionamento Apache para .htaccess com redirect 301 (permanente) ou 302 (temporário). Suporta múltiplas regras.