Ich möchte den Zugriff für einige VHosts einschränken, damit nur 127.0.0.1 darauf zugreifen kann. Ich habe immer so etwas verwendet, um den VHost an den localhost und nicht an die externe IP zu binden:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
....
}
}
Ich habe jedoch festgestellt, dass einige Tutorials auch explizite allow
Anweisungen für den localhost enthalten und alle anderen explizit ablehnen:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
allow 127.0.0.1;
deny all;
...
}
}
Werden diese allow
/ deny
Anweisungen wirklich benötigt, wenn ich erst bei 127.0.0.1 höre?
allow 127.0.0.1/32;
allow
überhaupt , weil ich festgelegtlisten
auf127.0.0.1
.Antworten:
Die
listen
Direktive teilt dem Betriebssystem mit, an welche Schnittstelle sich der Webserver bindet. Wenn Sie sich alsonetstat -a
nach dem Start von nginx ansehen , werden Sie feststellen, dass nginx nur auf dem 127.0.0.1-IP-Port 80 lauscht, was bedeutet, dass der nginx-Server über keine andere Schnittstelle erreichbar ist.Das Binden an eine bestimmte IP-Adresse funktioniert im eigentlichen Netzwerkstapel auf einer niedrigeren Ebene als die Anweisungen
allow
/deny
in der nginx-Konfiguration.Dies bedeutet, dass Sie für Ihren Anwendungsfall keine separaten
allow
/deny
Direktiven in Ihrer Konfiguration benötigen , da die Verbindungen im Netzwerkstapel niedriger begrenzt sind.Wenn Sie
listen 80;
nur angeben undallow
/deny
directives verwenden, sendet nginx einen HTTP-Fehlercode an den Client und teilt ihm mit, dass der Zugriff verweigert wird.In diesem
listen 127.0.0.1;
Fall kann der Browser überhaupt keine Verbindung zum Server herstellen, da für den Browser kein TCP-Port zum Herstellen einer Verbindung geöffnet ist.quelle
netstat
wird eine lokale Adresse von0.0.0.0:80
(allen Schnittstellen) angezeigt. Kann ich dann nochdeny
/allow
auf den lokalen Servern auslassen ?listen 80 default_server;
Direktive definiert wurde, wenn ein Client nach einem vhost fragt, an den gebunden ist127.0.0.1:80
. Wenn Sie keinendefault_server
definierten Server haben, wird einlisten 80;
definierter Server angezeigt.listen 127.0.0.1
können und ichallow/deny
auf diesen Servern nicht einmal benötige ?192.168.1.0
Angenommen , Ihre Netzwerk-ID lautet : Bearbeiten Sie Ihre Konfigurationsdatei wie folgt:Bitte lassen Sie mich wissen, wie es bei Ihnen funktioniert.
Bearbeiten Sie # 1:
Ja, die Erlaubnis-Direktive ist laut offiziellem Nginx-Wiki ein Muss . Ihr Beispiel ist:
quelle
127.0.0.1
;) Meine Frage ist, ob ich das überhaupt brauche,allow
weil ich mich schon darauf eingestelltlisten
habe127.0.0.1
.Ich wollte die gleiche Funktionalität erreichen (nur lokale Benutzer in Nginx zulassen) und fand heraus, dass ich so etwas Einfaches tun kann:
Diese Konfigurationsdatei funktioniert einwandfrei, ich verwende keine
allow
Direktive, sondern nur127.0.0.1:80
, und damit kann ich den Nginx-Zugriff nur auf lokale Benutzer beschränken!quelle