【问题标题】:Avoid running GeoIP on every page避免在每个页面上运行 GeoIP
【发布时间】:2012-11-23 11:08:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python session cookies nginx geoip


    【解决方案1】:

    从性能的角度来看,我宁愿拥有它,因此我仅在需要时请求 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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你完全错了。 Nginx 中的变量仅根据需要进行评估。如果在请求处理期间未使用$geoip_* 变量,则未查找geoip db。
      • 那么,如果我不在我的页面上调用 geoip 变量,geoip 模块根本不会被执行?我担心页面加载,所以在更多页面上我不会调用它,所以我想知道它不会被加载或减慢页面速度。
      • 那么,如果我不调用页面上的 geoip 变量,geoip 模块根本不会被执行? 是的,完全正确。
      • 不客气。 =) 其实官方邮件列表中有很多关于 nginx 的有趣信息:mailman.nginx.org/mailman/listinfo
      猜你喜欢
      • 1970-01-01
      • 2016-07-20
      • 2014-03-07
      • 2016-06-18
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多