Nginx 域名 UA 限制:无需 if 语句实现特定域名访问控制
可以使用 map 指令来实现,具体步骤如下:
- 在 nginx 配置文件中定义一个 map 变量,用于存储特定域名的 ua 限制条件,例如:
map $host $ua_restrict {
example.com 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';
}
上面的配置表示,如果请求的域名是 example.com,则只允许上述 User-Agent 访问。
- 在 server 配置中使用变量,例如:
server {
listen 80;
server_name example.com www.example.com;
# 设置 access_log 日志格式
log_format access '$remote_addr - $remote_user [$time_local] '$request' '
'$status $body_bytes_sent '$http_referer' '
''$http_user_agent' '$http_x_forwarded_for'';
# 判断 ua 是否符合要求,如果不符则返回 403
if ($http_user_agent != $ua_restrict) {
return 403;
}
location / {
# 其他配置
}
# 设置 access_log 日志路径
access_log /var/log/nginx/example.access.log access;
}
上面的配置中,如果请求的 User-Agent 不符合 $ua_restrict 变量中设置的条件,则会返回 403 错误,否则访问正常。同时,我们也设置了 access_log 日志格式和路径。
原文地址: http://www.cveoy.top/t/topic/nUSf 著作权归作者所有。请勿转载和采集!