我要做的是设置NGINX以检测特定的国家/地区代码。我现在正常工作,现在添加如下行
if ($geoip_country_code = IE) { rewrite ^(.*) http://link.com/for/Ireland;
这是我的实际站点配置文件而不是我的nginx.conf文件。
我还想做的是添加一个移动支票,例如,如果它是爱尔兰和移动,它将转到第二个链接。这甚至可以在这个级别吗?或者我只是在服务器级别检测国家,然后必须以更标准的方式处理移动设备,例如当页面加载和使用移动检测脚本时。我知道我可以这样做,但我希望能够将检测添加到我的NGINX配置中的相同catch中。
感谢所有帮助和信息。
答案 0 :(得分:1)
看看http://detectmobilebrowsers.com。它有nginx的代码片段。 最近我做了这样的nginx配置,工作正常。
答案 1 :(得分:0)
由于移动用户代理的巨大差异,使用代码重定向比使用nginx配置要好得多。特别是,在nginx上调用一系列if
语句的代价是非常重要的。
This website有一个非详尽的移动用户代理列表,旧的和不太旧的。你会很快发现这个名单实际上是非常大的,至少可以这么说。我们暂时只关注iPhone,iPod和iPad。它们很容易区分:
Mozilla / 5.0(设备类型; cpu类型;像Mac OS X一样的CPU; en)AppleWebKit / 420 +(KHTML,如Gecko)版本/ 3.0 Mobile / 1A543a Safari / 419.3
所以,这个不会造成问题。但是,字符串与其他东西非常相似,包括Safari的桌面用户代理......这是最简单的手机。 Android没有这么简单。以HTC Desire为例:
Mozilla / 5.0(Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build / ERE27)AppleWebKit / 530.17(KHTML,类似Gecko)版本/ 4.0 Mobile Safari / 530.17
操作系统的标识符更改为第三个字段,这意味着您现在需要至少两个正则表达式引擎调用来匹配iPhone和一些Android。我说一些,因为......好吧,我们去摩托罗拉Droid:
MOT-V9mm / 00.62 UP.Browser / 6.2.3.4.c.1.123(GUI)MMP / 2.0
... Waaat?
结论:如果你关心误报,你需要一个用户代理数据库。如果不这样做,只需使用用户代理上的正则表达式对nginx进行广泛检查,搜索关键字iPad,iPhone,iPod,Android,Windows Phone。这将标志着所有移动用户的80-85%。如果您想匹配所有人,您需要使用用户代理数据库,因为制造商会重写他们的使用者。