nginx GeoIP 缓存密钥

Posted

技术标签:

【中文标题】nginx GeoIP 缓存密钥【英文标题】:nginx GeoIP Cache Key 【发布时间】:2016-03-04 15:14:07 【问题描述】:

我想在 nginx 中使用 GeoIP 来根据国家/地区提供不同的页面。我也想缓存一切。

当来自美国的用户访问我的主页时,我希望他们从缓存中看到主页的美国版本。当来自英国的用户访问我的主页时,我希望他们从缓存中看到主页的英国版本。

安装 GeoIP 模块后,我可以将国家代码放在我的缓存键中吗?这是提高性能的最佳方法吗,因为现在服务器将为每个 IP 查找国家/地区。我不知道这是不是很重要。

我正在考虑获取浏览器的 userLanguage 设置并通过 AJAX 发送,然后将其缓存。只需要对几个字符进行地理定位。

Best way to determine user's locale within browser

【问题讨论】:

【参考方案1】:

按照标准教程安装 GeoIP 模块后,我只需将国家代码放入我的缓存键中即可:

$scheme$request_method$host$request_uri$geoip_country_code

我读到 nginx 将 GeoIP 数据库加载到内存中,因此性能似乎保持不变。

我发现了比 GeoIP 查找更能影响性能的其他问题:

    CGI 出现 404 个错误 Cachekey 不包含查询字符串。查询字符串的不同变体比国家/地区多得多。 清除缓存。通过删除所有文件清除缓存之前。现在我正在考虑使用 wget 获取新页面,然后将它们复制到缓存中。

【讨论】:

如果您使用的是 Cloudflare,则可以完全跳过所有 GeoIP 模块设置并使用已经可用的 $http_cf_ipcountry 变量。对于像我这样的 nginx 新手,这在你的 nginx 配置中如下所示:proxy_cache_key "$scheme$request_method$host$request_uri$http_cf_ipcountry"; 或者你可以将 proxy_cache_key 换成 fastcgi_cache_key

以上是关于nginx GeoIP 缓存密钥的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维

Nginx 开启 ssl 会话复用,能提升多少性能?

Cassandra密钥缓存

使用 TTL 与主动发送请求以使密钥无效以使缓存中的密钥无效的优缺点是啥?

nginx 缓存机制

git - 服务器主机密钥未缓存