nginx的browser模块

使用这个模块,可对各种浏览器的请求进行区别对待。通常区别浏览器在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。
转自:sudone.com

标签: nginx 分类: web服务器方向

当前暂无评论 »

我要报警