7

Ich möchte einige Standorte in Nginx durch die Angabe von deny/allow-Anweisungen zu sichern, aber ich will nicht Außenseiter wissen, dass ein Standort verweigert wird. Ich möchte, dass Außenstehende 404, nicht 403 http-Code bekommt. Meine Konfiguration Schnipsel istWie zu verweigern mit 404 auf Nginx

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

    allow 127.0.0.1; 
    deny all; 
} 

Wenn ich versuche, zu besuchen/admin/nginx antwortet mit HTTP 403, aber ich möchte es mit HTTP 404. Jedes Rezept für diese reagieren?

Antwort

2

Eine elegantere Möglichkeit besteht darin, eine benutzerdefinierte Fehlerseite zu erstellen. Auf dieser Seite können Sie anstelle des HTTP-Fehlercodes eine benutzerdefinierte Nachricht angeben.

Namen eine Fehlerseite

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; 
    } 

In Ihrem 40x.html können Sie jede Nachricht

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

Ort diese 40x.html in Ihrem Pfad schreiben/zu/öffentliches Verzeichnis

+0

Danke dafür. Hatte das schon in meiner Konfigurationsdatei für die 50x nicht gewusst das war die Art Dinge zu machen, wirklich nett, weiß sie nicht ob ein Ort tatsächlich existiert oder nicht :) –

+0

Ich habe die zurückgegebenen 404 Header mit Addons verifiziert. mozilla.org/de-DE/firefox/addon/live-http-headers - mit 'internal' in der Zeilengruppe'/40X.html' (anstelle von 'root path') wird die Standardseite' 404' zurückgegeben. –

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.

aus dieser Antwort Angepasst here

+0

Gibt dies tatsächlich den richtigen Fehlercode oder nur die richtige Ressource zurück? –

+0

Ich habe die Antwortheader nicht überprüft, aber ich gehe davon aus, dass es 403 antworten wird. Ich fand eine andere Lösung, die viel besser funktionieren könnte. – ARGB32

+0

Aber das wird alle 403 zu 404 ändern, oder nicht? Ich mag die andere Antwort mehr, wo Sie die 'return 404;' Zeile nach dem Ablehnen hinzufügen. – therealmarv

-1

Sie können "umschreiben" statt "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 in die Wurzel Ihrer Domain (zB _http verwenden : //127.0.0.1/404.php) oder ändern "pfad/zu/file/404.php? Id = $ 1"

-1

zurück 404; wird tun, was Sie wollen. Schauen Sie unten

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

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

Ich habe dies versucht, aber es gibt 404 sowohl auf erlauben und verweigern – baselq