我试图将流量限制在少数几个国家/地区,但我还希望将单个IP地址列入白名单。这是我的conf文件:
# restrict access by country
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allow_visit {
default no;
US Yes;
GB Yes;
IL Yes;
CA Yes;
}
##
# Virtual Host Configs
##
server { # simple reverse-proxy
listen 80;
server_name xXmySiteXx;
root /usr/share/nginx/html;
# root /var/www/html;
index index.php index.html index.htm;
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
# reject unauthorized countries
if ($allow_visit = no) {
return 403;
}
我尝试添加以下内容:
if($remote_addr = ipInQuestion) {
set $allow_visit = yes;
}
但是当我尝试重新加载nginx时,它失败了。我有什么想法,或者更好的方法吗?
编辑:
我从nginx得到的错误是:
nginx:[emerg]未知指令" if($ remote_addr"
答案 0 :(得分:1)
你弄清楚了问题,但是你仍然可能会遇到来自set语句在if中的问题。
为了摆脱if中的设置,你最好的选择就是制作另一张地图:
map $remote_addr $real_allow_visit {
default $allow_visit;
ipInQuestion no;
}
答案 1 :(得分:0)
我知道这是不好的做法,但我能够使用if方法设置变量...我必须将我的代码的第二部分调整为:
if ($remote_addr = ipInQuestion) {
set $allow_visit yes;
}
具体来说,我需要在if和之间添加空格(并从set语句中删除=。执行这些操作后,nginx会通过测试并重新加载。