可以使用 map 指令和正则表达式实现对特定域名只允许特定 UA 访问的功能。具体步骤如下:

  1. 在 nginx 配置文件中定义一个 map 变量,将需要限制访问的 UA 保存在该变量中。
map $http_user_agent $is_allowed {
    default 0;
    ~*^Mozilla/5.0 \(Windows NT 10.0; Win64; x64\) AppleWebKit/537.36 \(KHTML, like Gecko\) Chrome/88.0.4324.104 Safari/537.36 1;
}

在上面的代码中,$http_user_agent 表示用户的 UA 信息,~* 表示正则表达式不区分大小写匹配,^Mozilla/5.0 表示以 Mozilla/5.0 开头,后面跟着特定的字符串表示需要限制的 UA,1 表示允许访问,0 表示禁止访问。

  1. 针对需要限制 UA 的域名,在 server 块中添加一个 location 块,设置限制访问的规则。
server {
    listen 80;
    server_name example.com;

    location / {
        if ($is_allowed = 0) {
            return 403;
        }

        # 其他配置
    }
}

在上面的代码中,$is_allowed 表示上面定义的 map 变量,如果该变量的值为 0,则返回 403 错误,否则允许访问。注意,这里不能使用 if 语句,因为 if 语句会影响 nginx 的性能。

  1. 对于不需要限制 UA 的域名,可以直接配置 server 块,不需要添加 location 块。
server {
    listen 80;
    server_name example2.com;

    # 其他配置
}

这样就可以实现只允许特定 UA 访问某个域名的需求了。

Nginx 限制特定域名访问:使用 Map 指令实现 UA 限制

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

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