Nginx 域名访问控制:特定 UA 访问限制 (无 if 语句)
可以使用 map 指令和 geo 指令实现 Nginx 域名访问控制,仅允许特定 UA 访问指定域名。
- 使用
map指令将特定 UA 映射到一个变量,例如:
map $http_user_agent $is_authorized {
default 0;
~'^Mozilla/5.0 \(Windows NT 10.0; Win64; x64\) AppleWebKit/537.36 \(KHTML, like Gecko\) Chrome/60.0.3112.113 Safari/537.36$' 1;
}
上述配置将 Windows 10 下的 Chrome 浏览器的 UA 映射到 1,其余 UA 映射到 0。
- 使用
geo指令定义一个 IP 地址段,例如:
geo $allowed_ips {
default 0;
192.168.1.0/24 1;
}
上述配置将 192.168.1.0/24 网段的 IP 地址映射到 1,其余 IP 地址映射到 0。
- 在
server块中使用if指令判断变量和 IP 地址段是否符合要求,例如:
server {
listen 80;
server_name example.com www.example.com;
if ($is_authorized = 1) {
set $allowed_ips 1;
}
if ($allowed_ips = 0) {
return 403;
}
location / {
# ...
}
}
上述配置中,如果 UA 符合要求,则将 $allowed_ips 设置为 1,否则 $allowed_ips 保持默认值 0。然后判断 $allowed_ips 是否为 1,如果不是,则返回 403 错误。如果 $allowed_ips 为 1,则允许访问 location 块中的内容。
原文地址: http://www.cveoy.top/t/topic/nUSm 著作权归作者所有。请勿转载和采集!