Skip to main content

🌐 Apache Virtual Hosts

Virtual Hosts let you serve multiple websites from a single server – each with its own domain, root, and logs! Let's level up your Apache configuration. πŸ› οΈ


🧠 What Are Virtual Hosts?​

Apache Virtual Hosts allow:

  • 🌍 Hosting multiple domains on one server
  • πŸ”’ Per-domain SSL and logs
  • πŸ“ Separate document roots and configs

πŸ—οΈ HTTP Virtual Host Example (Port 80)​

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "/var/www/example"

ErrorLog ${APACHE_LOG_DIR}/example-error.log
CustomLog ${APACHE_LOG_DIR}/example-access.log combined
</VirtualHost>

πŸ“ Explanation:

  • ServerName β†’ Main domain
  • ServerAlias β†’ Extra domains like www
  • DocumentRoot β†’ Web files folder
  • Logs β†’ Tracks site activity and errors

πŸ” HTTPS (SSL) Virtual Host Example (Port 443)​

<VirtualHost *:443>
ServerName secure.example.com
DocumentRoot "/var/www/secure"

SSLEngine on
SSLCertificateFile /etc/ssl/certs/secure.crt
SSLCertificateKeyFile /etc/ssl/private/secure.key

ErrorLog ${APACHE_LOG_DIR}/secure-error.log
CustomLog ${APACHE_LOG_DIR}/secure-access.log combined
</VirtualHost>

βœ… Don’t forget to run:

a2enmod ssl
a2ensite secure.example.com.conf
systemctl reload apache2

πŸ› οΈ Setting Up Virtual Hosts on Ubuntu/Debian​

  1. πŸ“„ Create a new vhost config:

    sudo nano /etc/apache2/sites-available/example.com.conf
  2. βœ… Enable the site:

    sudo a2ensite example.com.conf
    sudo systemctl reload apache2
  3. ❌ To disable:

    sudo a2dissite example.com.conf

πŸ“‚ Directory Permissions Example​

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

πŸ’‘ Allows Apache to serve content and respect .htaccess files.


πŸ” Debugging Tips​

Run:

apachectl configtest   # Check syntax
apachectl -S # List active Virtual Hosts

πŸ“ Logs:

  • πŸ”§ /var/log/apache2/error.log
  • πŸ“Š /var/log/apache2/access.log

πŸ’‘ Best Practices​

  • 🧼 One config per domain (use sites-available)

  • πŸ” Always use SSL in production

  • 🎯 Use ServerAlias for subdomains

  • πŸ“ Organize root directories clearly

  • 🌐 Use IP-based vhosts if needed:

    <VirtualHost 192.168.1.50:80>

πŸ“Š Quick Reference Table​

DirectiveDescription
ServerNameMain domain name
ServerAliasAdditional domain names
DocumentRootFolder with site content
ErrorLogLogs server errors
CustomLogLogs site access
SSLEngineEnable SSL (HTTPS)
SSLCertificateFileSSL public certificate path
SSLCertificateKeyFileSSL private key path

πŸŽ‰ That’s it! You’re now a Virtual Host pro. Ready for .htaccess.md or security.md next? πŸ”