Ich habe einen Webserver mit vielen virtuellen Servern. Nur 1 davon ist SSL. Das Problem ist, dass kein Catchall-Serverblock auf SSL wartet und jede https-Anfrage an die anderen Sites vom 1 SSL-Block bearbeitet wird.
Meine Konfiguration sieht im Wesentlichen so aus:
# the catch all
server {
listen 80 default;
# I could add this, but since I have no default cert, I cannot enable SSL,
# and this listen ends up doing nothing (apparently).
# listen 443;
server_name _;
# ...
}
# some server
server {
listen 80;
server_name server1.com;
# ...
}
# some other server ...
server {
listen 80;
server_name server2.com;
# ...
}
# ... and it's https equivalent
server {
listen 443;
ssl on;
server_name server2.com;
# ...
}
Da es für 443 keinen Standard-Listener gibt, wird eine Anfrage wie https://server1.com
diese vom server2.com
https-Block bedient. Dies folgt der Logik server_name
in den Dokumenten.
Wenn es keine Übereinstimmung gibt, wird ein Serverblock {...} in der Konfigurationsdatei in der folgenden Reihenfolge verwendet:
- der Server-Block mit einer passenden Listen-Direktive, die als [default | default_server] markiert ist
- der erste Serverblock mit einer passenden Listen-Direktive (oder implizit listen 80;)
Was ist die bevorzugte Lösung für dieses Problem? Muss ich ein Dummy-Zertifikat für meinen Catch-All-Server-Block einrichten, damit ich 443 abhören und die schlechten Anforderungen verarbeiten kann? Gibt es einen Parameter, von dem ich nichts weiß, der eine genaue Übereinstimmung mit dem Hostnamen erzwingt server
?