Nginx: Mehrere Hostnamen auf einen umleiten

Das hier ist eher ein Memo für mich, als große Kunst 🙂 NginxIch stand vor folgendem kleinen Problem: Ich wollte mehrere Hostnamen auf einen einzigen finalen umleiten. Das wollte nicht so recht klappen.

Nach der Umstellung auf SSL leitet http://subdomain.domain1.de auf https://subdomain.domain1.de um. Das läßt sich problemlos und einfach über folgenden Code in der Konfigurationsdatei des Vhosts einrichten.

server {
listen 80;
server_name subdomain.domain1.de;
return 301 https://$server_name$request_uri;
}

Als ich der Website eine eigene Domain spendiert habe, stieß ich auf ein kleines Problem:

Ich wollte http://subdomain.domain1.de, http://www.domain2.de und https://subdomain.domain1.de auf https://www.domain2.de umleiten. Das versuchte ich wie folgt:

server {
listen 80;
server_name subdomain.domain1.de www.domain2.de domain2.de;
return 301 https://www.domain2.de$request_uri;
}

server {
listen 443 ssl http2;
server_name subdomain.domain1.de www.domain2.de domain2.de;
[…]
}

Soweit so gut. Oder auch nicht. Denn https://subdomain.domain1.de funktioniert zwar, leitet aber nicht auf https://www.domain2.de um. Nach etwas Knobelei hatte ich aber raus, wie das funktioniert:

server {
listen 80;
server_name subdomain.domain1.de domain2.de www.domain2.de;
return 301 https://www.domain2.de$request_uri;
}

server {
listen 443 ssl http2;
server_name subdomain.domain1.de;
[…]
return 301 https://www.domain2.de$request_uri;
}

server {
listen 443 ssl http2;
server_name www.domain2.de domain2.de;
[…]
}

Man benötigt also pro SSL-Host einen eigenen server { } Abschnitt. Im Nachhinein eigentlich logisch.