nginx geht zur falschen Site, wenn die angeforderte Site nicht auf Port 80 lauscht

nginx geht zur falschen Site, wenn die angeforderte Site nicht auf Port 80 lauscht

Ich hatte sowohl die Produktion (www.myexample.com) als auch die Entwicklung (dev.myexample.com) auf einem einzigen Server, wobei ich Serverblöcke und separate Verzeichnisse verwendete und beide auf Port 80 lauschten. Das hat gut funktioniert.

Jetzt habe ich das SSL-Zertifikat installiert und den SSL-Modus in der Site-Konfigurationsdatei aktiviert. Gleichzeitig habe ich den Abhörport von 80 auf 443 geändert, sodass die Site nicht auf Port 80, sondern nur auf Port 443 antworten sollte. Die Entwicklungssite läuft weiterhin wie bisher.

Jetzt scheint es, dass ich anstelle eines Fehlers die Entwicklungsseite erhalte, wenn ich mich verbinde mithttp://www.myexample.com.

Um dieses Problem zu beheben, habe ich einen echten „Standard“-Serverblock hinzugefügt (Servername auf _ gesetzt) ​​und auf ein Verzeichnis gezeigt, das keine Dateien enthält.

Gibt es einen besseren Weg? Wenn ich eine echte Standardwebsite möchte, möchte ich nicht, dass sie für einen bekannten Hostnamen angezeigt wird. Ich vermute, ich muss einen Serverblock erstellen, der auf www.myexaple.com:80 lauscht, und ihn so konfigurieren, dass er alle Seitenanforderungen irgendwie ablehnt, aber wie?

Wie kann ich die Beantwortung von Anfragen für eine Site, die ich nicht hoste, vollständig einstellen?

Antwort1

Es empfiehlt sich immer, einen Standardserver mit einem ungültigen Hostnamen zu konfigurieren. Dadurch wird sichergestellt, dass Clients ohne festgelegtes Host-Header-Feld (oder mit einem Host, den Sie nicht konfiguriert haben) abgelehnt werden.

server {
    listen              [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k;
    server_name         _;
    return              403;
}

server {
    listen              [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl;
    server_name         _;
    ssl_certificate     certificates/_/pem;
    ssl_certificate_key certificates/_/key;
    return              403;
}

https://github.com/Fleshgrinder/nginx-configuration

Wie Sie sehen, kehre ich mit einem 403 Access Forbidden-Statuscode zurück, da dieser für meinen Anwendungsfall am besten geeignet ist (siehe Kommentar unten). Wenn Sie einfach gar nichts zurückgeben möchten, verwenden Sie den speziellen Nginx-Code 444.

verwandte Informationen