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