nginx访问控制:一些允许自由,一些有密码或被拒绝

时间:2015-07-13 11:04:06

标签: nginx

我想为nginx做一个复杂的配置:

  • 基本上所有来自互联网的访问都被拒绝(= deny all;
  • 应允许网段自由访问(= allow 10.0.1.0/24;
  • 应该允许另一个网段使用基本身份验证(= satisfy all; deny all; allow 10.0.2.0/24;
  • 进行访问

我想编写如下配置文件,但当然它有错误,因为satisfy只能出现一次。

location / {
    satisfy any;
    allow 10.0.1.0/24;  # allowed to access freely
    deny all;
    satisfy all;  ### ERROR
    allow 10.0.2.0/24;  # allowed to access, with basic auth
    auth_basic           "closed site";
    auth_basic_user_file "closed.htpasswd";
    # proxy to somewhere
    http://localhost:10081;
}

我如何达到这个要求?

谢谢,

1 个答案:

答案 0 :(得分:0)

自我回答(部分)

我可以接受为这种情况修改server指令配置,因此以下配置看起来正常工作

server {
    listen 80;
    # server directive allows only these two networks
    allow 10.0.1.0/24;
    allow 10.0.2.0/24;
    deny all;
    location / {
        satisfy any;
        # here comes the two networks above, so I can rely on "satisfy any"
        allow 10.0.1.0/24;
        deny all;
        auth_basic           "closed site";
        auth_basic_user_file "closed.htpasswd";
        proxy_pass http://localhost:10081;
    }
}

我希望有更直截了当的方式。