7

Chcę zabezpieczyć niektóre lokalizacje w Nginx poprzez dostarczanie dyrektyw odmowy/zezwolenia, ale nie chcę, aby osoba postronna wiedziała, że ​​dana lokalizacja jest zabroniona. Chcę outsidera, aby uzyskać 404, a nie 403 kodu http. Moja konfiguracja urywek jestJak odmówić z 404 na nginx

location /admin/ { 
    uwsgi_pass myupstream1; 
    include /path/to/uwsgi_params; 

    allow 127.0.0.1; 
    deny all; 
} 

Kiedy próbuję odwiedzić/admin/nginx odpowiada HTTP 403, ale chcę odpowiedzieć HTTP 404. Każda recepta na to?

Odpowiedz

2

Bardziej eleganckim sposobem jest utworzenie niestandardowej strony błędu. Na tej stronie zamiast pokazywać kod błędu http, możesz określić niestandardową wiadomość.

Nazwa strona błędu

error_page 403 =404 /40X.html; 

    location /admin/ { 
     uwsgi_pass myupstream1; 
     include /path/to/uwsgi_params; 
     allow 127.0.0.1; 
     deny all; 
    } 

    location /40X.html { 
    root path/to/public; 
    } 

W swojej 40x.html można napisać dowolną wiadomość

<html> 
<body> The requested resource is not available </body> 
</html> 

miejsce to 40x.html w ścieżce/do/katalog publiczny

+0

Dzięki za to. Już miałem to w moim pliku konfiguracyjnym dla 50x nie wiedziałem, że to był sposób robienia rzeczy, naprawdę fajny, wiem, że nie wiedzą, czy faktycznie istnieje lokalizacja, czy nie :) –

+0

Zweryfikowałem zwrócony 404 nagłówek z dodatkami. mozilla.org/en-US/firefox/addon/live-http-headers - użycie 'internal' w sekcji'/40X.html' (zamiast 'root path') zwraca domyślną stronę' 404'. –

5
error_page 403 404 /404.html; 

location = /404.html { 
    internal; #return 404 
} 

location /admin/ { 
    uwsgi_pass myupstream1; 
    include /path/to/uwsgi_params; 

    allow 127.0.0.1; 
    deny all; 
} 

The 'internal' returns 404 by default.

Adaptacja ta odpowiedź here

+0

Czy to rzeczywiście zwraca właściwy kod błędu, czy tylko odpowiedni zasób? –

+0

Nie sprawdziłem nagłówków odpowiedzi, ale przypuszczam, że odpowie na 403. Znalazłem inne rozwiązanie, które może działać o wiele lepiej. – ARGB32

+0

Ale to zmieni się od 403 do 404, czy nie? Podoba mi się druga odpowiedź bardziej, gdy dodajesz linię "return 404;" po odmowie. – therealmarv

-1

Można użyć "przepisać" zamiast "deny all"

location /admin/ { 
    uwsgi_pass myupstream1; 
    include /path/to/uwsgi_params; 

    #allow 127.0.0.1; 
    #deny all; 

    rewrite ^/admin/(.*)$ /404.php?id=$1; 

} 

Put 404.php do korzeni swojej domeny (np _HTTP : //127.0.0.1/404.php) lub zmień "ścieżka/do/pliku/404.php? Id = $ 1"

-1

powrót 404; zrobi to, co chcesz. Spójrz poniżej

location /admin/ { 
     uwsgi_pass myupstream1; 
     include /path/to/uwsgi_params; 

     allow 127.0.0.1; 
     deny all; 
     #Following line returns 404 
     return 404; 
    } 
+4

Próbowałem tego, ale zwraca 404 zarówno na zezwolenie i odmowę – baselq