如何在nginx上拒绝使用404

时间:2014-10-14 19:48:57

标签: security nginx http-status-code-404 http-status-code-403

我想通过提供deny / allow指令来保护nginx中的某些位置,但我不希望局外人知道位置被拒绝。我希望局外人获得404,而不是403 http代码。我的配置代码段是

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

    allow 127.0.0.1;
    deny all;
}

当我尝试访问/ admin / nginx使用HTTP 403进行响应时,我希望它以HTTP 404响应。有什么配方吗?

4 个答案:

答案 0 :(得分:4)

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.

改编自这个答案here

答案 1 :(得分:2)

更优雅的方法是创建自定义错误页面。在该页面中,您可以指定自定义消息,而不是显示http错误代码。

命名错误页面

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

在您的40x.html中,您可以撰写任何消息

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

将此40x.html放在您的路径/ / public目录

答案 2 :(得分:-1)

您可以使用“重写”而不是“拒绝所有”

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

    #allow 127.0.0.1;
    #deny all;

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

}

将404.php放入域的根目录(例如_http://127.0.0.1/404.php)或更改 “path / to / file / 404.php?id = $ 1”

答案 3 :(得分:-1)

返回404; 会做你想要的。看下去

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

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