Ich habe mehrere Server auf demselben Computer, einige nur mit http, einige mit http und https. In separaten Dateien sind mehrere Serverblöcke definiert, die in der Hauptkonfigurationsdatei enthalten sind.
Ich habe einen "Standard" -Server für http eingerichtet, der eine allgemeine "Wartungsseite" für Anforderungen bereitstellt, die keinem der anderen Servernamen in den anderen Konfigurationsdateien entsprechen. Der http-Standardserver funktioniert wie erwartet, er verwendet den Servernamen "_" und erscheint zuerst in der Liste der Includes (da ich festgestellt habe, dass bei doppelten Servernamen der zuerst angezeigte verwendet wird). Das funktioniert super.
Ich würde den gleichen genauen Serverblock erwarten (nur das Umschalten von "listen 80 default_server" auf "listen 443 default_server" und auch, anstatt die Seite "return 444" zu bedienen), tut dies jedoch nicht. Stattdessen scheint es, dass der neue Standard-https-Server tatsächlich alle eingehenden https-Verbindungen abruft und dazu führt, dass diese fehlschlagen, obwohl die anderen Serverblöcke geeignetere Servernamen für die eingehenden Anforderungen haben. Durch das Entfernen des neuen Standard-https-Servers wird das halbkorrekte Verhalten fortgesetzt: Die Websites mit https werden alle korrekt geladen. Websites ohne https werden jedoch alle an den ersten https-Server in den Include-Dateien weitergeleitet (wenn laut Dokumentation kein "default_server" angezeigt wird, ist der erste Serverblock "default").
Meine Frage ist also, wie man in nginx einen "Standardserver" für SSL-Verbindungen richtig definiert. Warum ist es so, dass wenn ich explizit einen "default_server" setze, es gierig wird und alle Verbindungen aufbaut, während wenn ich nginx implizit den "default server" bestimmen lasse, funktioniert es wie erwartet (mit dem falschen Server als Standard und den anderen realen Servern) sich richtig verhalten)?
Hier sind meine "Standardserver". HTTP funktioniert, ohne andere Server zu beschädigen. HTTP bricht andere Server und verbraucht alles.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
Weiß jemand von euch, was hier falsch sein könnte?