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 缓存密钥的主要内容,如果未能解决你的问题,请参考以下文章