Understanding ServerName vs. ServerAlias: Key Differences in Apache Virtual Host Configuration


1 views

When configuring Apache web server, both ServerName and ServerAlias directives serve as hostname identifiers, but with crucial operational differences:

# Basic syntax examples:
ServerName primary.example.com
ServerAlias alternate.example.com *.example.net

ServerName serves multiple purposes:

  • Defines the primary hostname for name-based virtual hosts
  • Used in self-referential URLs
  • Required for each VirtualHost block

ServerAlias provides supplementary functionality:

  • Only valid within VirtualHost context
  • Accepts wildcard patterns and multiple values
  • Cannot override ServerName

Single domain with aliases:

<VirtualHost *:80>
    ServerName main.com
    ServerAlias www.main.com shop.main.com
    DocumentRoot /var/www/main
</VirtualHost>

Wildcard domain handling:

<VirtualHost *:80>
    ServerName example.org
    ServerAlias *.example.org
    DocumentRoot /var/www/wildcard
</VirtualHost>
  • ServerName must be a single fully qualified domain name (FQDN)
  • ServerAlias accepts space-separated values and wildcards
  • When both exist, ServerName takes precedence in URL generation
  • Multiple ServerName directives in same context will override each other

For SSL configurations, ensure both directives match certificate:

<VirtualHost *:443>
    ServerName secure.com
    ServerAlias www.secure.com
    SSLCertificateFile /path/to/cert.pem
    # Must cover all ServerAlias names in certificate
</VirtualHost>

In Apache HTTP Server configuration, both ServerName and ServerAlias directives define hostnames for virtual hosts, but they serve distinct purposes:

# Basic VirtualHost configuration example

    ServerName primary.example.com
    ServerAlias www.example.com example.com *.dev.example.com
    DocumentRoot /var/www/html

ServerName serves as the primary hostname that Apache uses for:

  • Redirection URLs when no matching hostname is found
  • Server-generated pages (error pages, directory listings)
  • Canonical name resolution in some modules (mod_ssl)

ServerAlias defines alternative names that should be served by the same VirtualHost:

  • Accepts wildcard patterns (e.g., *.example.com)
  • Allows multiple domain variants
  • Doesn't affect server self-identification

Multiple domains serving same content:


    ServerName main-domain.com
    ServerAlias www.main-domain.com alt-domain.com www.alt-domain.com
    DocumentRoot /var/www/shared_content

Wildcard subdomain handling:


    ServerName platform.example.com
    ServerAlias *.platform.example.com
    DocumentRoot /var/www/platform
    # Custom log format to track subdomains
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\"" subdomain_log
    CustomLog /var/log/apache2/subdomain_access.log subdomain_log

1. Default VirtualHost Fallback:
Always define a ServerName for your default VirtualHost to prevent unpredictable behavior:


    ServerName fallback.example.com
    DocumentRoot /var/www/default

2. SSL Certificate Matching:
ServerAlias entries must be covered by the SSL certificate when using HTTPS:


    ServerName secure.example.com
    ServerAlias www.secure.example.com
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    # Wildcard certificate required for:
    # ServerAlias *.secure.example.com

While ServerAlias provides flexibility, excessive entries can impact:

  • Configuration parsing time
  • Memory usage for large-scale deployments
  • SSL handshake performance (due to SAN certificate size)

For environments with thousands of domain aliases, consider:

# Using mod_vhost_alias for dynamic mass hosting
VirtualDocumentRoot /var/www/vhosts/%0