3

We have 2 stores which are XXXXXX.com and XXXXXX.com.mx, I'd like to allow only US IPs go to XXXXXX.com any other IPs need to route to XXXXXX.com.mx

We used to use Limelight for routing but we're no longer using them then we decided to do it by ourself. now we're looking for a fastest and best way to route customers based on GEO-ip.

The way the rules were set in Limelight, if Country was not US or IN and the request was .XXXXXX.com/, then route to www.XXXXXX.com.mx.

4

2 回答 2

3

你有几个选择。

  • 使用类似geoip-redirect的东西,一个预建的库来做这个。
  • 使用第三方库,例如django-geoip,然后检查登录页面中的用户位置并进行重定向。
  • 使用django.contrib.gis.geoip编写与上述类似的您自己的解决方案。
于 2013-10-16T21:47:16.700 回答
1

我知道这个问题很老,但我最近也在Django 3.1.4中解决了这个问题。此方法依赖于 Cloudflare CDN,因为 Cloudflare 可以选择将 GEO 位置标头添加到所有请求中。

在此处输入图像描述

Cloudflare 使用国家/地区格式 ISO 3166-1 Alpha 2,可以wikipedia 上找到。

在 Django 中,我们可以像这样检索国家代码:

country = request.META.get('HTTP_CF_IPCOUNTRY') 

为了成功重定向,我们可以使用自定义的 Django 中间件,如下所示:

from django.shortcuts import redirect

def cf_geo(get_response):
    def middleware(request):
        response = get_response(request)
        country = request.META.get('HTTP_CF_IPCOUNTRY') 
        #https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
        redirected_geos = ['AF','AL','AZ','BD','BH','CD','CF','CG','DZ','ET','ER','GH','KE','KZ','MG','MZ','NA','NE','NG','PK','SD','SO','SS','UG','UZ','ZM','ZW','XX']       
        if country in redirected_geos:
            return redirect('https://google.com')
        return response
    return middleware

我发现这种与 Cloudflare 的组合非常简单,因为我不必安装任何额外的库或进行任何额外的 API 调用。

Cloudflare 使用了一些额外的代码 'XX' = 未知国家 'T1' = 使用 Tor 网络的人

于 2021-08-29T22:38:42.380 回答