Ich habe ein Wildcard-SSL-Zertifikat und mehrere Subdomains auf derselben IP. Jetzt möchte ich, dass mein Nginx nur die genannten Servernamen verarbeitet und die Verbindung für andere beendet, sodass es so aussieht, als würde nginx
es nicht für nicht aufgeführte Servernamen ausgeführt (nicht antworten, ablehnen, tot sein, kein einziges Byte als Antwort). Ich mache folgendes
ssl_certificate tls/domain.crt;
ssl_certificate_key tls/domain.key;
server {
listen 1.2.3.4:443 ssl;
server_name validname.domain.com;
//
}
server {
listen 1.2.3.4:443 ssl;
server_name _;
// deny all;
// return 444;
// return 404;
//location {
// deny all;
//}
}
Ich habe im letzten Serverblock fast alles ausprobiert, aber keinen Erfolg. Ich erhalte entweder eine gültige Antwort vom bekannten virtuellen Server oder einen Fehlercode. Bitte helfen Sie.
quelle
Die Antwort von cjc wies bereits korrekt auf das Problem hin, dass bei aktiviertem SSL versucht wird, Hostnamen abzugleichen. Es ist jedoch möglich, wie folgt vorzugehen:
Hinweis: Ja, es stimmt, dass es im Allgemeinen
if
böse ist , aberif
in diesem Fall ist es sicher . (Lesen Sie die verlinkte Seite, wenn Sie sich selbst überzeugen müssen.)Im Gegensatz zu dem, was vorgeschlagen wurde, wird das Hinzufügen des folgenden Blocks nicht funktionieren:
weil ein
validname.domain.com
passendes SSL-Zertifikat keinem zufälligen Domainnamen entspricht. Ich habe es versucht, und Nginx tat so, als ob der Block überhaupt nicht vorhanden wäre.Das geht auch nicht:
weil dadurch jede einzelne HTTPS-Verbindung an Port 443 ausfällt, auch die, die durchlaufen sollten. Ich habe es auch versucht.
wget
hat einen SSL-Handshake-Fehler gemeldet.quelle
Die meisten Antworten hier beziehen sich darauf, warum es nicht funktioniert und nicht, wie es funktioniert.
Hier ist, wie - Sie müssen einen solchen Catch-All-Server zu einem "Standardserver" machen und Pfade zu cert / key bereitstellen, damit er eingehende SSL-Anforderungen entschlüsseln und mit dem Host-Header übereinstimmen kann:
Beachten Sie dort den ssl_certificate / ssl_certificate_key. Wenn sie nicht angegeben werden, versucht nginx immer noch, einen solchen Standardserver zu verwenden, und schlägt fehl, da er keine SSL-Verbindung ohne Zertifikat / Schlüssel akzeptieren kann. Man kann jedes Zertifikat / jeden Schlüssel verwenden, zB selbst signiert. ...
So generieren Sie ein selbstsigniertes Zertifikat:
Siehe auch /server//a/841643/87439
quelle
Ich habe die obige Lösung heute implementiert und sie hat reibungslos funktioniert. Alle nicht angegebenen URLs werden jetzt gelöscht. Das Platzieren dieses Servercodes vor dem eigentlichen Eintrag für den virtuellen Server war der Schlüssel - alle fehlerhaften URLs werden jetzt an diesen "Standard" -Server gesendet.
quelle
Sie sollten dazu in der Lage sein, indem Sie den Server, der die nicht aufgelisteten Elemente verarbeitet, zum ersten Serverblock in Ihrer Konfiguration machen.
Alle nicht spezifisch identifizierten Domains werden von diesem Serverblock behandelt.
quelle