【问题标题】:NGINX skipping authentication on locationNGINX 在位置上跳过身份验证
【发布时间】: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


【解决方案1】:

感谢@Richard Smith 的提示 - 我们需要一个解决方法,因为return 在任何其他指令之前执行。

location = /ping {
  try_files DUMMY @return200;
}
location @return200 {
  return 200 'OK';
}

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2021-12-06
    • 1970-01-01
    • 2014-05-21
    • 2018-06-12
    • 2011-12-23
    相关资源
    最近更新 更多