拒绝访问 Nginx 中的目录

拒绝访问 Nginx 中的目录

我正在尝试拒绝访问/devnginx 中的目录。

如果我编辑主配置文件目录:\nginx-1.18.0\conf\nginx.conf像这样,它就可以工作了:

....
http {
    ...
    server {
        ...
        location /dev {
            deny all;
        }
        ...
    }
}
...

但实际上,我希望所有配置都位于 PHP 应用程序所在的目录中,因此我希望将所有信息放在这样的配置文件中目录:\nginx-1.18.0\html\nginx.conf

所以我的方法是更改​​主配置文件目录:\nginx-1.18.0\conf\nginx.conf像这样:

....
http {
    ...
    server {
        ...
        include    ../html/nginx.conf;
        ...
    }
}
...

和本地配置文件目录:\nginx-1.18.0\html\nginx.conf像这样:

location /dev {
    deny all;
}

但是,这不起作用。我仍然可以访问dev/

我尝试了所有我能想到的变体,例如,,,/dev等等,甚至是绝对路径。但都不起作用。dev/dev/html/dev

我究竟做错了什么?

附加问题:是否可以在不更改主配置文件的情况下拒绝对目录的访问?就像在 Apache.htaccessweb.configIIS 中所做的那样?

答案1

正则表达式足以满足您的需要。所有包含的请求路径都dev将被拒绝。

server {
    location ~* dev {
        deny all
    }
}

是否可以在不更改主配置文件的情况下拒绝对目录的访问?就像在 Apache 的 .htaccess 或 IIS 的 web.config 中所做的那样?

http://nginx.org/en/docs/http/ngx_http_access_module.html#deny可能适合您的需要。

答案2

抱歉,因为我是新人,所以无法发表评论。

您使用的语法似乎正确

location = /dev {
    deny all;
   # access_log off;
    log_not_found off;
    return 444;
}

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

当您询问 Nginx 其配置是否正确时(从命令行输入 nginx -t),您是否收到任何警告或错误?您是否确定没有其他配置设置覆盖您,类似位置块允许访问。

我个人使用 Nginx 的经验告诉我,应将所有限制尽可能简单并放在一个地方,例如 includes/restrictions.conf,并且我将该文件包含在我的每个服务器块中。

我注意到您使用的是 Windows,也许 Nginx 在 Windows 上运行时有一些我不知道的特性。

再次抱歉,我无法发表评论,否则我会发表评论。

相关内容