2017-05-29 2 views
0

Ich habe eine Website auf nginx laufen und ich möchte nur private IP-Adressen auf bestimmte Teile davon und private und öffentliche zu den anderen Teilen zum Beispiel ermöglichen:Nginx Zugang beschränkt

wwww.mydomain.com/first - erlaubt nur privaten IPs wwww.mydomain.com/second - erlauben private und öffentliche IP-Adressen

ich viele Möglichkeiten ausprobiert, zur Zeit habe ich die folgende Konfiguration, aber es öffentliche und private Blockierung:

location ^~/first { 
allow 172.0.0.0/24; 
deny all; 
return 404; 
} 

Vielen Dank.

Antwort

0

Wenn Sie versuchen, den Zugriff auf statische Dateien zu beschränken, kann das Problem durch try_files $uri =404 (Standard) verursacht werden, das übereinstimmen kann, wenn die Dateien am angegebenen Speicherort vorhanden sind. Das folgende Beispiel könnte zu kompliziert aussehen, aber Nginx-Fähigkeiten demonstrieren und sollte ziemlich kugelsicher sein.

Ich gehe davon aus folgenden Verzeichnisstruktur:

/var/www/ 
├── chroot 
├── _first 
│   └── index.html 
├── index.html 
└── _second 
    └── index.html 

und Site-Konfiguration:

# proxy server for accessing real files 
server { 
    listen 8080; 
    index index.html index.htm; 
    server_name _; 
    root /var/www; 
    try_files $uri $uri/ =404; 
} 

server { 
    listen 80; 
    index index.html index.htm; 
    server_name _; 
    root /var/www/chroot; # empty jail directory 
    try_files index.htm =404; # non-existing location 

    location ^~ /first { 
    # in case that $uri exists, deny rule is not applied 
    allow 127.0.0.1/32; 
    deny all; 
    try_files $uri @proxy; 
    } 

    location @proxy { 
    rewrite ^/first(.*)$ /_first/$1 break; 
    proxy_pass http://127.0.0.1:8080; 
    proxy_redirect  off; 
    proxy_set_header Host $host; 
    } 

    location ^~ /second { 
    rewrite ^/second(.*)$ /_second/$1 break; 
    proxy_pass http://127.0.0.1:8080; 
    proxy_redirect  off; 
    proxy_set_header Host $host; 
    } 

    # shoud match all not above 
    location/{ 
    deny all; 
    return 403; 
    } 
} 

nun einigen grundlegender Test, wenn Sie von den weißen Liste IP zuzugreifst:

$ curl -L localhost:80/first 
first 

öffentlicher Endpunkt

$ curl -L localhost:80/second 
second 

andere URI sollte wie der Versuch, "private" URIs in 403 führen zuzugreifen:

$ curl -L localhost:80/_first 
<html> 
<head><title>403 Forbidden</title></head> 
<body bgcolor="white"> 
<center><h1>403 Forbidden</h1></center> 
<hr><center>nginx/1.1.19</center> 
</body> 
</html> 
+0

Es ist nicht für mich arbeiten. Ich versuche, den Zugriff auf/zuerst zuerst zu beschränken, aber selbst wenn ich den Ort verlassen^~/erste/leer bekomme ich 404, ich habe es auch mit allow getestet und ich bekomme die gleiche Antwort 404, auch wenn remove 404 zurück kann das nicht herausfinden. – HSC

+0

@HSC siehe die aktualisierte Antwort. Umschreibungen sind nicht notwendig, das ist nur ein etwas komplexeres Szenario. Ich kann es entfernen, wenn es zu verwirrend ist. – Tombart