可以使用 map 指令和 geo 指令来实现只允许特定 UA 访问某个域名的功能,具体操作步骤如下:

  1. 在 Nginx 配置文件中定义一个 map 变量,用于存储要限制 UA 的域名列表,可以按照以下格式添加:
map $http_host $restricted_ua {
    default 0; # 默认为 0,表示不限制 UA
    'domain1.com' 1; # 在 'domain1.com' 上限制 UA
    'domain2.com' 1; # 在 'domain2.com' 上限制 UA
}

其中,$http_host 是 Nginx 内置变量,表示请求中的 Host 头部信息,$restricted_ua 是自定义的变量名,用于存储限制 UA 的状态。

  1. 使用 geo 指令定义一个 IP 地址段,用于匹配要限制 UA 的用户,可以按照以下格式添加:
geo $restricted_ip {
    default 0;
    10.0.0.0/8 1; # 在 10.0.0.0/8 网段内限制 UA
    192.168.0.0/16 1; # 在 192.168.0.0/16 网段内限制 UA
}

其中,$restricted_ip 是自定义的变量名,用于存储限制 UA 的 IP 地址段。

  1. server 块中使用 if 指令,根据 mapgeo 变量的值来判断是否限制 UA,可以按照以下格式添加:
server {
    listen 80;
    server_name 'domain1.com' 'domain2.com';
    if ($restricted_ua = 1) {
        if ($restricted_ip = 1) {
            return 403; # 如果在限制的 IP 地址段内,则返回 403
        }
        if ($http_user_agent !~ 'allowed_ua') {
            return 403; # 如果 UA 不在允许列表中,则返回 403
        }
    }
    # 其他配置项
}

其中,allowed_ua 是一个用竖线分隔的正则表达式,表示允许的 UA 列表,如 'Chrome|Firefox'。如果 UA 不在允许列表中,则返回 403。

这样,就可以实现只允许特定 UA 访问某个域名的功能,而且不需要使用 if 语句。

Nginx 配置特定域名仅允许特定 UA 访问(无 if 语句)

原文地址: http://www.cveoy.top/t/topic/nUSn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录