Chcę ograniczyć dostęp do niektórych VHostów, aby tylko 127.0.0.1 mogło uzyskać do niego dostęp. Zawsze użyłem czegoś takiego do powiązania VHost z hostem lokalnym, a nie z zewnętrznym adresem IP:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
....
}
}
Zauważyłem jednak, że niektóre samouczki zawierają również wyraźne allow
wytyczne dla hosta lokalnego i wyraźnie zaprzeczają wszystkim innym:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
allow 127.0.0.1;
deny all;
...
}
}
Czy te allow
/ deny
dyrektywy są naprawdę potrzebne, gdy słucham już tylko wersji 127.0.0.1?
allow 127.0.0.1/32;
allow
w ogóle, bo ustawionylisten
na127.0.0.1
.Odpowiedzi:
listen
Dyrektywa mówi o tym, co system operacyjny z interfejsem sama wiąże serwera WWW. Tak więc, kiedy spojrzysz na tonetstat -a
po uruchomieniu nginx, zobaczysz, że nginx nasłuchuje tylko na porcie 80 127.0.0.1 IP, co oznacza, że do serwera nginx nie można uzyskać dostępu za pośrednictwem innego interfejsu.Wiązanie z określonym adresem IP działa na niższym poziomie w rzeczywistym stosie sieciowym niż dyrektywy
allow
/deny
w konfiguracji nginx.Oznacza to, że nie potrzebujesz osobnych
allow
/deny
dyrektyw w konfiguracji z przypadkiem użycia, ponieważ połączenia są ograniczone niżej na stosie sieciowym.Jeśli podasz
listen 80;
tylko i użyjeszallow
/deny
dyrektyw, nginx wyśle do klienta kod błędu HTTP, informując, że odmowa dostępu.W takim
listen 127.0.0.1;
przypadku przeglądarka nie może w ogóle połączyć się z serwerem, ponieważ nie ma otwartego portu TCP, z którym mogłaby się połączyć.źródło
netstat
pokazuje lokalny adres0.0.0.0:80
(wszystkich interfejsów). Czy mogę nadal ominąćdeny
/allow
na serwerach lokalnych?listen 80 default_server;
dyrektywie, gdy klient poprosi o vhost związany z127.0.0.1:80
. Jeśli nie maszdefault_server
zdefiniowanego, pokaże to serwer, którylisten 80;
zdefiniował.listen 127.0.0.1
nielokalni mieli dostęp do serwerów, a ja nawet nie potrzebujęallow/deny
na tych serwerach?Powiedzmy, że masz identyfikator sieci
192.168.1.0
, edytuj plik conf w następujący sposób:Daj mi znać, jak to działa.
Edycja nr 1:
Tak, zgodnie z oficjalną wiki Nginx jest to konieczne . Ich przykładem jest:
źródło
127.0.0.1
;) Moje pytanie brzmi, czy muszę, żeallow
w ogóle, bo już ustawionylisten
do127.0.0.1
.Chciałem osiągnąć tę samą funkcjonalność (zezwalaj tylko lokalnym użytkownikom w nginx) i doszedłem do wniosku, że mogę zrobić coś takiego:
Ten plik konfiguracyjny działa dla mnie dobrze, nie używam żadnej
allow
dyrektywy, ale tylko127.0.0.1:80
i dzięki temu jestem w stanie ograniczyć dostęp nginx tylko do lokalnych użytkowników!źródło