我有一个 nginx 的 IP 白名单,但除此之外,我还想对特定 IP 进行基本身份验证。
例如,允许以下 IP 访问:
198.51.100.1
198.51.100.2
需要对此 IP 进行基本身份验证:
198.51.100.3
并拒绝其他任何人。
这怎么可能?satisfy
指令似乎没有解决这个问题
答案1
您可以使用 GEO 指令实现这一点:http://nginx.org/en/docs/http/ngx_http_geo_module.html#geo
仅使用您的 IP 地址示例的草图:
geo $authentication {
default "Authentication required";
198.51.100.1 "off";
198.51.100.2 "off";
198.51.100.3 "on";
...
}
server {
...
location / {
satisfy any;
# basic auth referencing to geo with $authentication
auth_basic $authentication;
auth_basic_user_file /etc/nginx/.htpasswd;
# whitelist for the inital ip address restrictions
include /etc/nginx/conf.d/ip-whitelist.conf.include;
deny all;
}}