Subdomains sind untergeordnete Domains, die vor der Hauptdomain stehen. Sie ermöglichen eine logische Trennung verschiedener Dienste oder Bereiche.
Was ist eine Subdomain?
Aufbau einer Domain:
subdomain.domain.tld
│ │ │
│ │ └── Top-Level-Domain (.de, .com)
│ └──────── Second-Level-Domain (ihr-name)
└───────────────── Subdomain (blog, shop, api, ...)
Beispiele:
blog.example.com
shop.example.com
api.example.com
mail.example.comWann Subdomains nutzen?
Typische Anwendungsfälle
| Subdomain | Verwendung | |-----------|------------| | www | Hauptwebsite | | blog | Blog/News | | shop | Online-Shop | | api | API-Server | | mail | Webmail | | admin | Admin-Panel | | staging | Testumgebung | | dev | Entwicklung | | cdn | Content Delivery | | app | Web-Anwendung |
Subdomain vs. Unterverzeichnis
Subdomain (blog.example.com):
- Technisch getrennt
- Eigene Webserver-Konfiguration
- Eigenes SSL-Zertifikat (oder Wildcard)
- Andere Server möglich
- Gut für separate Anwendungen
Unterverzeichnis (example.com/blog):
- Gleiche Domain
- Gleiche Konfiguration
- Gleiche SSL
- Einfacher zu verwalten
- Besser für SEO (geteilte Autorität)
DNS-Einträge erstellen
A-Record (IPv4)
Name: blog
Typ: A
Wert: 123.45.67.89
TTL: 3600Ergebnis: blog.example.com zeigt auf IP 123.45.67.89
AAAA-Record (IPv6)
Name: blog
Typ: AAAA
Wert: 2001:db8::1
TTL: 3600CNAME-Record (Alias)
Name: blog
Typ: CNAME
Wert: example.com.
TTL: 3600Hinweis: CNAME verweist auf anderen Domainnamen, nicht auf IP.
Mehrere Subdomains auf gleiche IP
blog A 123.45.67.89
shop A 123.45.67.89
api A 123.45.67.89Oder mit Wildcard:
* A 123.45.67.89DNS prüfen
# A-Record prüfen
dig blog.example.com A +short
# Alle Records
dig blog.example.com ANY
# Mit bestimmtem DNS-Server
dig @8.8.8.8 blog.example.comWebserver-Konfiguration
Apache Virtual Host
# /etc/apache2/sites-available/blog.example.com.conf
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/blog
<Directory /var/www/blog>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/blog-error.log
CustomLog ${APACHE_LOG_DIR}/blog-access.log combined
</VirtualHost>Aktivieren:
a2ensite blog.example.com.conf
systemctl reload apache2Nginx Server Block
# /etc/nginx/sites-available/blog.example.com
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
error_log /var/log/nginx/blog-error.log;
access_log /var/log/nginx/blog-access.log;
}Aktivieren:
ln -s /etc/nginx/sites-available/blog.example.com /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginxSSL für Subdomains
Let's Encrypt für einzelne Subdomain
certbot --nginx -d blog.example.com
# oder
certbot --apache -d blog.example.comMehrere Subdomains in einem Zertifikat
certbot --nginx -d example.com -d www.example.com -d blog.example.com -d shop.example.comWildcard-Zertifikat
# Erfordert DNS-Challenge
certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.comBei der DNS-Challenge müssen Sie einen TXT-Record erstellen.
Nginx mit SSL
server {
listen 80;
server_name blog.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name blog.example.com;
ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;
root /var/www/blog;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}Subdomain auf anderen Server
DNS-Eintrag
blog A 234.56.78.90 (anderer Server)Reverse Proxy (Subdomain auf anderen Port)
Wenn die Anwendung auf localhost:3000 läuft:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}PHP-Anwendungen
WordPress auf Subdomain
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}Mehrere WordPress-Installationen
/var/www/main/ → example.com
/var/www/blog/ → blog.example.com
/var/www/shop/ → shop.example.comE-Mail-Subdomain
MX-Record für Subdomain
support.example.com. MX 10 mail.support.example.com.
mail.support.example.com. A 123.45.67.89SPF für Subdomain
support.example.com. TXT "v=spf1 mx -all"Wildcard-Subdomain
DNS
* A 123.45.67.89Nginx Catch-All
server {
listen 80;
server_name *.example.com;
root /var/www/wildcard;
# Subdomain als Variable
set $subdomain "";
if ($host ~ ^(.+)\.example\.com$) {
set $subdomain $1;
}
# Dynamisches Root-Verzeichnis
root /var/www/subdomains/$subdomain;
}Subdomain für Entwicklung
Lokale Hosts-Datei
# /etc/hosts (Linux/Mac) oder C:\Windows\System32\drivers\etc\hosts (Windows)
127.0.0.1 dev.example.local
127.0.0.1 blog.example.localStaging-Subdomain
server {
listen 80;
server_name staging.example.com;
# Basic Auth für Zugriffschutz
auth_basic "Staging Server";
auth_basic_user_file /etc/nginx/.htpasswd;
root /var/www/staging;
# ...
}Troubleshooting
DNS nicht aufgelöst
# DNS prüfen
dig blog.example.com
# Lokaler Cache leeren
# Linux
systemd-resolve --flush-caches
# Windows
ipconfig /flushdnsWebserver antwortet nicht
# Nginx Config testen
nginx -t
# Apache Config testen
apachectl configtest
# Logs prüfen
tail -f /var/log/nginx/error.log
tail -f /var/log/apache2/error.logSSL-Probleme
# Zertifikat prüfen
openssl s_client -connect blog.example.com:443 -servername blog.example.com
# Certbot Status
certbot certificatesCheckliste neue Subdomain
□ DNS-Eintrag erstellt (A/AAAA/CNAME)
□ DNS-Propagation abgewartet (dig prüfen)
□ Verzeichnis erstellt (/var/www/subdomain)
□ Webserver-Konfiguration erstellt
□ Konfiguration aktiviert
□ Webserver neu geladen
□ SSL-Zertifikat erstellt
□ HTTP→HTTPS Redirect eingerichtet
□ Firewall-Regel (falls nötig)
□ Testen!Fazit
Subdomains bieten eine saubere Trennung verschiedener Dienste und Anwendungen unter einer Domain. Der Prozess ist immer gleich: DNS-Eintrag erstellen, Webserver konfigurieren, SSL einrichten. Für mehrere Subdomains empfiehlt sich ein Wildcard-Zertifikat. Beachten Sie die DNS-Propagation – Änderungen können einige Stunden dauern, bis sie weltweit sichtbar sind.