基于访问IP跳转对应城市的功能

基于访问IP跳转对应城市的功能

             

    有些情况下网站的展示会和用户的所在的城市有联系,比如团购,优惠服务等。APP可以通过GPS定位得到用户所在的城市,但PC端的业务如何进行判断呢,我们可以判断访问的IP来确认对应城市。PC端请求时会判断到客户端的IP属于哪个城市,将请求通过302跳转到对应的城市,常见的业务逻辑如下:

基于访问IP跳转对应城市的功能

             

    有些情况下网站的展示会和用户的所在的城市有联系,比如团购,优惠服务等。APP可以通过GPS定位得到用户所在的城市,但PC端的业务如何进行判断呢,我们可以判断访问的IP来确认对应城市。PC端请求时会判断到客户端的IP属于哪个城市,将请求通过302跳转到对应的城市,常见的业务逻辑如下:

    1、IP所属城市的清单,网上有很多开源的IP对应清单库,读者可自行下载,当然如果对于IP信息需要及时更新和准确性更高的话,建议使用付费平台。

    2、对应库不一定能覆盖所有的IP,并且还可能会存在误差,又或者用户所在的城市没有相关的服务,无法完成跳转到指定的城市,因此还需要做一些友好的提示,方便用户切换到想去的城市。

    3、用户如果做了切换城市的操作,都可以认为用户是需要在这个城市继续访问的,因此不能对每次的请求都去做IP对应城市跳转的操作。

    4、用户切换城市的操作,由前端的js去设置cookie,表明用户已经有了想去的地方。

 

了解到核心要素后,我们可以使用用Nginx进行处理。

    使用模块: ngx_http_geo_module,此模块Nginx默认已经提供了支持,不需要额外添加。

    指令:geo

    语法:geo [$address] $variable { ... }

    配置环境: http

示例:

geo $geo {

    ranges; #使用以IP段的形式定义地址,它必须放在首位。为了提升装载IP库的性能,IP段应按升序排列。

    default beijing; #无法匹配到对应的IP段,即使用这个默认值

    1.0.32.0-1.0.63.255 guangzhou; #IP段对应的城市,空格分开

    1.2.2.0-1.2.2.255 beijing;

    1.2.4.0-1.2.4.255 beijing;

    1.24.0.0-1.24.31.255 huhehaote;

    1.24.32.0-1.24.39.255 wulanchabu;

}

 

含义: 请求经过http执行阶段时,geo指令默认会从 $remote_addr获取IP值在去和$address匹配,如果匹配成功,就获取$address对应的值,将此值赋给$geo,如果匹配不到,就使用 default的值,即beijing。通过此操作,我们只需要准备好一份IP对应城市的清单即可。

 

下面提供一段简单的Nginx配置,它可以用来做IP跳转对应城市的功能:

location = / {

     if ($cookie_current_city){

    set $geo $cookie_current_city; # $cookie_current_city表示用户可能已经选择过城市或者之前已经IP跳转过,所以就直接跳转到对应cookie的城市

     rewrite ^/ $geo.testnginx.com redirect;

}

     rewrite ^/ $geo.testnginx.com redirect;

 


    用户进入网站的首页后,可以根据用户的IP进行跳转对应的城市,如果用户发现跳转有误差或者想换个城市看看,用户可以切换到自己想要的城市,此时前端JS可以种一个cookie,确保下次用户在访问首页的时候就会默认进入用户切换的城市。

 

    注意:

    1、cookie应该有效期;

    2、确保每个城市的服务都是存在的,如果某些城市没有对应的服务,那么在跳转的配置里面,应该去除掉,避免跳转到空的页面。

    图1根据访问IP跳转城市

图1中的关键要素:

    1、IP所属城市的清单,网上有很多开源的IP对应清单库,读者可自行下载,当然如果对于IP信息需要及时更新和准确性更高的话,建议使用付费平台。

    2、对应库不一定能覆盖所有的IP,并且还可能会存在误差,又或者用户所在的城市没有相关的服务,无法完成跳转到指定的城市,因此还需要做一些友好的提示,方便用户切换到想去的城市。

    3、用户如果做了切换城市的操作,都可以认为用户是需要在这个城市继续访问的,因此不能对每次的请求都去做IP对应城市跳转的操作。

    4、用户切换城市的操作,由前端的js去设置cookie,表明用户已经有了想去的地方。

 

了解到核心要素后,我们可以使用用Nginx进行处理。

    使用模块: ngx_http_geo_module,此模块Nginx默认已经提供了支持,不需要额外添加。

    指令:geo

    语法:geo [$address] $variable { ... }

    配置环境: http

示例:

geo $geo {

    ranges; #使用以IP段的形式定义地址,它必须放在首位。为了提升装载IP库的性能,IP段应按升序排列。

    default beijing; #无法匹配到对应的IP段,即使用这个默认值

    1.0.32.0-1.0.63.255 guangzhou; #IP段对应的城市,空格分开

    1.2.2.0-1.2.2.255 beijing;

    1.2.4.0-1.2.4.255 beijing;

    1.24.0.0-1.24.31.255 huhehaote;

    1.24.32.0-1.24.39.255 wulanchabu;

}

 

含义: 请求经过http执行阶段时,geo指令默认会从 $remote_addr获取IP值在去和$address匹配,如果匹配成功,就获取$address对应的值,将此值赋给$geo,如果匹配不到,就使用 default的值,即beijing。通过此操作,我们只需要准备好一份IP对应城市的清单即可。

 

下面提供一段简单的Nginx配置,它可以用来做IP跳转对应城市的功能:

location = / {

     if ($cookie_current_city){

    set $geo $cookie_current_city; # $cookie_current_city表示用户可能已经选择过城市或者之前已经IP跳转过,所以就直接跳转到对应cookie的城市

     rewrite ^/ $geo.testnginx.com redirect;

}

     rewrite ^/ $geo.testnginx.com redirect;

 


    用户进入网站的首页后,可以根据用户的IP进行跳转对应的城市,如果用户发现跳转有误差或者想换个城市看看,用户可以切换到自己想要的城市,此时前端JS可以种一个cookie,确保下次用户在访问首页的时候就会默认进入用户切换的城市。

 

    注意:

    1、cookie应该有效期;

    2、确保每个城市的服务都是存在的,如果某些城市没有对应的服务,那么在跳转的配置里面,应该去除掉,避免跳转到空的页面。

Pingbacks已打开。

Trackbacks
  1. generic cialis at walmart 发布于 2019年11月3日 00:47 #

    WUMN - 基于访问IP跳转对应城市的功能

  2. https://topearners.xyz/ 发布于 2019年11月6日 15:09 #

    WUMN - 基于访问IP跳转对应城市的功能

  3. generic viagra at walmart 发布于 2019年11月7日 08:09 #

    WUMN - 基于访问IP跳转对应城市的功能

  4. viagra pill 发布于 2019年11月8日 01:14 #

    WUMN - 基于访问IP跳转对应城市的功能

  5. cialis generic name 发布于 2019年11月9日 15:08 #

    WUMN - 基于访问IP跳转对应城市的功能

  6. kratom tincture 发布于 2019年11月10日 23:31 #

    WUMN - 基于访问IP跳转对应城市的功能

  7. cheap viagra usa without prescription 发布于 2019年11月11日 15:10 #

    WUMN - 基于访问IP跳转对应城市的功能

  8. cialis 发布于