热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginx的browser模块

作者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。


推荐阅读
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
author-avatar
山杰百云692
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有