Frage Der beste Weg, um den Standard-Server zu verhindern?


Ich habe eine Reihe von vhosts, und ich möchte den Standard-vhost "abschalten", entweder durch eine leere Seite, eine Fehlerseite oder generell die effizienteste Nutzung der Ressourcen von Nginx, während nur andere vhosts über den Zugriff zugelassen werden vordefinierte Domains


25
2017-08-23 09:21


Ursprung




Antworten:


Definieren Sie ein Standardserver das gibt ein zurück HTTP 444 Code:

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

(Die Rückgabe eines 4xx-Fehlercodes bedeutet, dass Anforderungen von einem Client als nicht erfolgreiche Anfrage interpretiert werden können, eher als eine HTTP 200 Leere Seite, aber absolut funktioniert Vertrauen Sie mir.)


36
2017-09-25 03:01



444 ist ein Nicht-Standard-Nginx spezifischer Code: "ein spezieller Nginx-Nicht-Standard-Code 444 wird zurückgegeben, der die Verbindung schließt" - bzeaman
Dies funktioniert nicht für https. Ein einfacher Empfang 443 default_server funktioniert auch nicht, da der ssl-Handshake zuerst erfolgt und nginx einen Fehler vor der Rückgabe 444. Eine Lösung, die ich noch ausprobieren muss, sollte aber ein selbstsigniertes Zertifikat für den Standard-HTTPS-Server und optional sein Umleiten zu http, um irgendwelche Browserfehler zu vermeiden. - Simon Bengtsson
Das Nginx-Ticket bietet eine gute Möglichkeit, SSL-Verbindungen zu verweigern Hier. Sie bieten auch ein ProblemumgehungEinstellung ssl_ciphers aNULL;. - nh2
Beachten Sie, dass die erwähnte Problemumgehung nicht-SNI-fähige HTTPS-Clients (wie die von nginx) unterbricht proxy_pass, außer du setzt proxy_ssl_server_name on;) von jedem anderen zu erreichen server_names (so im Wesentlichen das legitime brechen server_names für Port 443, dass Sie tun möchte durchlassen). Sehen trac.nginx.org/nginx/ticket/195#comment:11 für Details. - nh2


Einfach definieren Standard vhost, der auf das Verzeichnis mit der leeren index.html-Datei verweist.

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

und platziere den leeren Index in / var / www / placeholder


4
2017-08-23 09:29



Es fängt alle Anfragen auf, die keinen Ihrer Domainnamen und keine Antwort mit leeren Seiten erreichen. - wojciechz
Kannst du nicht einfach? return ''; anstatt root...index ? - oriadam