避免在每个页面上运行GeoIP

时间:2012-11-23 11:08:26

标签: python session cookies nginx geoip

这是我正在使用的模块:http://wiki.nginx.org/HttpGeoipModule

从我所看到的,因为它是在nginx配置和uwsgi上配置的,所以看起来别无选择,只能让它在每个页面上运行geoip,然后只在需要时收集和使用变量。

从性能的角度来看,我宁愿拥有它,所以我只在需要时请求geoip,将其缓存在cookie或会话中,然后不再请求它来加速网站。

有人能告诉我这是否可行?

2 个答案:

答案 0 :(得分:2)

  

从性能的角度来看,我宁愿拥有它,所以我只在需要时请求geoip,将其缓存在cookie或会话中,然后不再请求它来加速网站。   有人能告诉我这是否可行?“

是的,这是可能的。但从性能的角度来看,你不必担心,因为geoip数据库存储在内存中(在读取配置阶段),而nginx执行查找的速度非常快。

无论如何,你可以使用类似的东西:

set $country $cookie_country;

if ($country == '') {
    set $country $geoip_country_code;
    add_header Set-Cookie country=$geoip_country_code; 
}

uwsgi_param GEOIP_COUNTRY $country;

答案 1 :(得分:-2)

不,您不能让nginx仅按需执行GeoIP查找。由于您定义了 geoip_country geoip_city 指令,因此nginx将从GeoIP数据库请求数据,无论答案是否在以后使用。但是你可以在没有nginx的情况下获取GeoIP数据,即直接使用你的应用程序。看一下python geoip lib:http://dev.maxmind.com/geoip/downloadable#Python-5