通过IP保护位置,同时在其他地方应用基本身份validation

我想达到以下结果:

  • 对任何位置,文件,path应用基本身份validation
  • 删除IP / CIDR范围白名单的基本身份validation
  • 除了一个IP地址(包括上面的内容)之外,阻止所有对特定目录的访问,以及其下的所有访问。

这是我使用的nginxconfiguration:

server { listen 80 default; # Basic auth auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; satisfy any; # IP whitelist include /etc/nginx/conf.d/ip-whitelist.conf.include; deny all; # Lock down the "hello" directory to specific IP addresses location /hello/ { # Developers only - ever! allow 12.34.56.78; deny all; } # ... } 

目前发生的情况是,上面的项目符号列表中的第一点和第二点都在起作用 – 即白名单中的任何IP都没有跨站点的基本身份validation,但是如果IP没有列入白名单,则会提示用户进行基本身份validation。

然而,“hello”的位置块似乎不起作用,并且仍然允许与“hello”目录下的任何内容相同的条件,例如,如果我尝试从白名单IP访问/hello/world.php ,它被服务。 如果我从非白名单IP访问它,我会得到基本的身份validation。

我想阻止除IP 12.34.56.78 (示例)以外的任何人访问“hello”目录。

我需要改变什么?

正如您发现的那样,除了服务器级别的身份validation设置之外,不build议这样做,因为它们将应用于所有位置。 虽然可以closures基本身份validation,但似乎没有办法清除现有的IP白名单。

更好的解决scheme是将身份validation添加到/ location,以使其不会被/helloinheritance。

问题来了,如果你有其他的地方需要基本的身份validation和IP白名单,在这种情况下,可能值得考虑将身份validation组件移动到包含文件或嵌套在/下。

 server { listen 80 default; # Lock down the "root" directory to specific IP addresses location / { satisfy any; # Basic auth auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; # IP whitelist include /etc/nginx/conf.d/ip-whitelist.conf.include; deny all; # Inherits auth settings from parent location ~ \.php$ { # PHP specific config } } # Lock down the "hello" directory to specific IP addresses location /hello/ { # Developers only - ever! allow 12.34.56.78; deny all; } # ... }