具有双重条件的nginx(ipgeo + useragent)



我们正在部署一个使用不同顶级域名的国际网站。

我们使用nginx的ipgeo模块来检测用户位置,并在需要时进行重定向。

但是我们发现机器人存在一些问题,因此我们希望在这种情况下防止重定向。

为此,我们需要在nginx配置中使用双重条件,这是不支持的。

我们可以使用不同的解决方案吗?谢谢

这是来自英国配置的代码片段,我认为这是不言自明的。

if ($http_user_agent !~* "google|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot"( { # 转到全局站点 if ($geoip_city_continent_code != "EU"( { 重写 ^ https://xxxx.us$request_uri 永久; } # 转到欧盟网站 if ($geoip_city_country_code != "GB"( { 重写 ^ https://xxxx.eu$request_uri 永久; } # 留在英国网站 }

这可能适用于您的系统。请看一看

if ($http_user_agent !~* "google|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot") {
# Here you can setup a value which will skip redirect. 
set $geoip_city_continent_code="UK";

}
# goto global site
if ($geoip_city_continent_code != "EU") {
rewrite ^ https://xxxx.us$request_uri permanent;
}
# goto EU site
if ($geoip_city_country_code != "GB") {
rewrite ^ https://xxxx.eu$request_uri permanent;
}

我们的解决方案来自@Kernelv5。

此外,它为重定向增加了更大的灵活性,而不会增加复杂性。

谢谢

set $continent "${geoip_city_continent_code}";
set $country "${geoip_city_country_code}";
if ($http_user_agent ~* "google|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot") {
set $continent "US";
set $country "US";
}
if ($country = "GB") {
rewrite ^ https://xxxx.co.uk$request_uri permanent;
}
if ($continent = "EU") {
rewrite ^ https://xxxx.eu$request_uri permanent;
}

相关内容

  • 没有找到相关文章

最新更新