根据请求的来源要求基本身份验证(使用地理模块按国家/地区过滤)

Requiring basic auth depending on the origin of the request (filtering by country with geo module)

有没有一种方法可以根据请求的来源要求基本身份验证,并按国家/地区过滤?我的目标是能够始终要求基本身份验证,除非请求来自 X、Y 或 Z 国家/地区。

此答案假设您已经安装并运行该模块,有大量好的安装指南,所以我将跳过它。

您可以将 geoIP 映射为:

geoip_country /path/to/GeoIP/GeoIP.dat;
map $geoip_country_code $not_auth_required {
    default no;
    ZZ yes;
    YY yes;
    XX yes;
}

然后为每个人设置基本身份验证,除了那些:

server {
    listen 80;
    root   /foo/bar/baz;
    auth_basic           “Wrong Country";
    auth_basic_user_file /etc/nginx/.htpasswd; #typical user:$hash auth.

    if ($not_auth_require = yes) {
        auth_basic off;
    }


    location / {
         #do things
    }
}

理论上这个逻辑应该可以解决问题,因为您需要的是白名单,而不是黑名单。我希望我帮助了