如果绑定两个域名nginx怎么设置其中某个域名只允许特定ua访问请不要使用if语句
可以使用map指令和正则表达式实现。具体步骤如下:
- 在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访问某个域名的需求了
原文地址: https://www.cveoy.top/t/topic/eDEw 著作权归作者所有。请勿转载和采集!