【发布时间】:2021-08-21 15:45:34
【问题描述】:
我们希望保护我们的整个服务器免受匿名访问,除了一个端点/public。但是,我们看到位置 /ping 以状态 200 匿名访问。
为什么?
确定我们不需要在每个位置块上放置身份验证指令吗?
server {
location /ping {
return 200 'OK'; # Should not be available anonymously!
}
location = /public {
auth_basic off;
return 200 'OK'; # Should be available anonymously
}
# Users must authenticate in general
satisfy any;
auth_basic "Authentication";
auth_basic_user_file /etc/my/.htpasswd;
}
根据文档,这应该可以工作:
或者,您可以通过基本身份验证限制对整个网站的访问,但仍将某些网站区域设为公开。在这种情况下,请指定 auth_basic 指令的 off 参数,以取消从上层配置级别的继承:
server {
...
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
【问题讨论】:
-
如果您想使用
return 200 'OK';- 请参阅this answer。对于不属于重写模块的任何内容 - 它应该可以正常工作。 -
也许位置块应该遵循授权配置 - 而不是在前面?
-
谢谢@RichardSmith 我已经发布了一个有效的答案 - 请随时回答,我会标记你的。
标签: nginx