作者:山杰百云692 | 来源:互联网 | 2017-11-06 09:50
作者Ayou:http:sudone.com使用这个模块,可对各种浏览器的请求进行区别对待。通常区别浏览器在nginx里可用if标签和正则表达式实现,与正则表达式相比,这个模块主要是可以提供更好的性能,而且可以使配置文件更清晰,但功能方面较弱。这个模块提供的标
作者Ayou:http://sudone.com/
使用这个模块,可对各种浏览器的请求进行区别对待。通常区别浏览器在nginx里可用if标签和正则表达式实现,与正则表达式相比,这个模块主要是可以提供更好的性能,而且可以使配置文件更清晰,但功能方面较弱。
这个模块提供的标签和语法不很多,主要是两个标签:modern_browser和ancient_browser,这两个标签从字面理解为“新浏览器” 和“旧浏览器”,于是乎,browser模块利用客户端发来的User-Agent头,将请求划分为“新浏览器请求”和“旧浏览器请求”。那么这里就有一个疑问,这个模块只能划分出两类请求吗?答案是yes。也就是说,假如要为ie6、ie7、ie8分别对应三个首页,这个模块还做不了,这时只能用正则表达式来分;为ie6和ie7对应两个首页,是可以支持得了。
modern_browser
modern_browser指定新浏览器类型,但是modern_browser这个标签的浏览器参数是预定好的,不能随便乱写,浏览器参数只有 msie, gecko (Mozilla-based browsers) opera, safari, konqueror几种,另外还可以写的浏览器参数是unlisted,表示所有的浏览器。modern_browser还有一个参数是浏览器版本,比如 msie 6.0。
配置例子:
modern_browser msie 5.5;
modern_browser gecko 1.0.0;
modern_browser opera 9.0;
modern_browser safari 413;
modern_browser konqueror 3.0;
ancient_browser
ancient_browser指定旧浏览器类型,与modern_browser不同,ancient_browser可以自定义参数,其参数指的是在 User_Agent这个头里包含的字符串。ancient_browser的参数大小写是区分的。
配置例子:
ancient_browser BlackBerry;
ancient_browser UCWEB;
ancient_browser UCWEB BlackBerry;
定义好这两个标签之后,就可以通过$modern_browser或$ancient_browser变量来判断属于新浏览器还是旧浏览器。
if ( $modern_browser )
{
...
}
if ( $ancient_browser )
{
...
}
注意:如果User-Agent为空值时,将会被归为新浏览器。
browser模块还有两个标签modern_browser_value和ancient_browser_value,这两个标签可以指定符合条件时$modern_browser和$ancient_browser的值是什么,上面的例子中,$modern_browser 和$ancient_browser都是true或false。
modern_browser_value modern.;
modern_browser msie 5.5;
index index.${modern_browser}html index.html;
撰写index.modern.html和index.html两个页面,就可以让msie 5.5的浏览器读取到index.modern.html,其它的读取到index.html。
由于这个模块的功能弱,用这个模块处理事情还是比较麻烦的。
以下这个配置用于对手机浏览器的判断:
modern_browser unlisted;
ancient_browser GoBrowser;
ancient_browser MIDP;
ancient_browser WAP;
ancient_browser UP.Browser;
ancient_browser Smartphone;
ancient_browser Obigo;
ancient_browser Mobile;
ancient_browser AU.Browser;
ancient_browser wxd.Mms;
ancient_browser WxdB.Browser;
ancient_browser CLDC;
ancient_browser UP.Link;
ancient_browser KM.Browser;
ancient_browser UCWEB;
ancient_browser SEMC-Browser;
ancient_browser Mini;
ancient_browser Symbian;
ancient_browser Palm;
ancient_browser Nokia;
ancient_browser Panasonic;
ancient_browser MOT-;
ancient_browser SonyEricsson;
ancient_browser NEC-;
ancient_browser Alcatel;
ancient_browser Ericsson;
ancient_browser BENQ;
ancient_browser BenQ;
ancient_browser Amoisonic;
ancient_browser Amoi;
ancient_browser Capitel;
ancient_browser PHILIPS;
ancient_browser SAMSUNG;
ancient_browser Lenovo;
ancient_browser Mitsu;
ancient_browser Motorola;
ancient_browser SHARP;
ancient_browser WAPPER;
ancient_browser LG-;
ancient_browser LG/;
ancient_browser EG900;
ancient_browser CECT;
ancient_browser Compal;
ancient_browser kejian;
ancient_browser Bird;
ancient_browser BIRD;
ancient_browser G900/V1.0;
ancient_browser Arima;
ancient_browser CTL;
ancient_browser TDG;
ancient_browser Daxian;
ancient_browser DBTEL;
ancient_browser Eastcom;
ancient_browser EASTCOM;
ancient_browser PANTECH;
ancient_browser Dopod;
ancient_browser Haier;
ancient_browser HAIER;
ancient_browser KONKA;
ancient_browser KEJIAN;
ancient_browser LENOVO;
ancient_browser Soutec;
ancient_browser SOUTEC;
ancient_browser SAGEM;
ancient_browser SEC;
ancient_browser SED-;
ancient_browser EMOL;
ancient_browser INNO55;
ancient_browser ZTE;
ancient_browser iPhone;
ancient_browser Android;
ancient_browser Windows CE;
ancient_browser DX;
ancient_browser TELSON;
ancient_browser TCL;
ancient_browser oppo;
ancient_browser ChangHong;
ancient_browser MALATA;
ancient_browser KTOUCH;
ancient_browser TIANYU;
ancient_browser TOUCH;
ancient_browser MAUI;
ancient_browser J2ME;
ancient_browser BlackBerry;
ancient_browser yulong;
ancient_browser coolpad;
if ( $ancient_browser )
{
proxy_pass http://m.sudone.com;
}
在这个配置中,将手机浏览器配置在ancient_browser中,电脑浏览器为modern_browser。