Nginx 限制特定域名访问:使用 Map 指令实现 UA 限制
可以使用 map 指令和正则表达式实现对特定域名只允许特定 UA 访问的功能。具体步骤如下:
- 在 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 表示禁止访问。
- 针对需要限制 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 的性能。
- 对于不需要限制 UA 的域名,可以直接配置 server 块,不需要添加 location 块。
server {
listen 80;
server_name example2.com;
# 其他配置
}
这样就可以实现只允许特定 UA 访问某个域名的需求了。
原文地址: http://www.cveoy.top/t/topic/nUSd 著作权归作者所有。请勿转载和采集!