admin管理员组文章数量:1567751
欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!
ngx_http_browser_module用于从"User-Agent"请求头中获取指定变量值。
浏览器模块 语法及语义
ancient_browser
语法:ancient_browser string …;
语义:如果任一指定的子串在请求头的"User-Agent"域中被发现,浏览器将被认定为旧式浏览器。 特殊字符串"netscape4"相当于正则表达式"^Mozilla/[1-4]"。
如果浏览器被识别为旧式浏览器,则ancient_browser等于ancient_browser_value指定的值。
ancient_browser_value
语法:ancient_browser_value string;
语义:设定变量$ancient_browser的值。
modern_browser
语法:modern_browser browser version;
modern_browser unlisted;
语义:指定一个版本,此版本及后续版本的浏览器都被认定为新式浏览器。 浏览器可以是下列之一: msie、gecko(基于Mozilla)、opera、safari或者konqueror。
版本可被指定为以下形式:X, X.X, X.X.X, 或 X.X.X.X。 每一形式的最大值分别是4000, 4000.99, 4000.99.99, 和 4000.99.99.99。
浏览器既没有在modern_browser中列出,又没有在ancient_browser中列出时,如果配置了特殊值unlisted,那么浏览器将被认定为新式浏览器,否则认定为旧式浏览器。 如果请求头中没有"User-Agent"域,浏览器以没有列出对待。
modern_browser_value
语法:modern_browser_value string;
语义:设定变量$modern_browser的值;
$msie
语义:如果浏览器被识别为任何版本的MSIE,则$msie为1;
浏览器模块 示例
为指定的浏览器版本指定index页面:
为演示效果,在/usr/local/nginx/html/目录下新建browser目录,在browser目录下新建index.html和index.modern.html,为做区分,两个html的内容稍有差异。
在默认nginx.conf的基础上修改配置如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name securitit;
location / {
modern_browser_value "modern.";
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;
root /usr/local/nginx/html/browser/;
index index.${modern_browser}html index.html;
}
}
}
通过./nginx -s reload平滑重启Nginx后,访问http://192.168.20.9/,会出现如下效果,说明浏览器版本与配置匹配成功,所以访问了index.modern.html资源:
为了看出不一样的效果,将nginx.conf的配置进行修改:
location / {
modern_browser_value "modern.";
modern_browser msie 15.5;
modern_browser gecko 11.0.0;
modern_browser opera 19.0;
modern_browser safari 1413;
modern_browser konqueror 13.0;
root /usr/local/nginx/html/browser/;
index index.${modern_browser}html index.html;
}
通过./nginx -s reload平滑重启Nginx后,访问http://192.168.20.9/,会出现如下效果,说明浏览器版本与配置匹配失败,所以访问了index.html资源:
引导旧式浏览器重定向到指定页面:
location / {
modern_browser msie 5.0;
modern_browser gecko 0.9.1;
modern_browser opera 8.0;
modern_browser safari 413;
modern_browser konqueror 3.0;
modern_browser unlisted;
ancient_browser Links Lynx Netscape4;
if ($ancient_browser){
rewrite ^ /ancient.html;
}
}
浏览器之争
从Web1.0时代开始,浏览器作为PC端互联网入口,成为了各大大小小浏览器厂商争夺用户资源的主战场,在这个过程中,诞生了多种多样的浏览器,凭借其各自的特色和优势雄踞一方。
1994年,网景公司推出第一个图形化浏览器Netscape,微软嗅查到浏览器的重要性,收购不成主研自主浏览器IE,两者成为了第一次浏览器大战的主角,最后微软通过Windows操作系统绑定IE的方式,大败Netscape,开始了长达十年的霸主之路。败走的Netscape,成立Mozilla基金会,后期退出Firefox,Firefox凭借其多种多样的插件,仍可占有一席之地。
2008年,Google Chrome的推出,撼动了IE的霸主地位,第二次浏览器大战到来,这其中包括Chrome、Firefox、Safari、IE、Opera。最后以Chrome的胜利结束占据,Firefox仍占有一定份额,Safari凭借苹果的优势独占一方,IE和Opera则慢慢开始了谢幕演出。
国内市场中,出现更多的浏览器,每个人可能都能举出几个例子:360浏览器、搜狗浏览器、猎豹浏览器、QQ浏览器等等。但国内的浏览器的几乎都是改装浏览器,基于主流的浏览器内核,表面进行个性化。
为什么要说这些,是需要了解,在Web发展的过程中,出现的各种各样的浏览器,种类繁多的浏览器为Web生态带来了致命性的问题:浏览器兼容性问题。各厂商为市场份额,极力退出个性化功能,完全无视规则约束,导致多浏览器间无法兼容。
总结
面对多种多样的浏览器,同一浏览器的繁杂的版本,应用程序无法适配所有的情况,需要通过应用本身进行限制,划定应用范围。
ngx_http_browser_module可以在代理的层面,完成浏览器差异的简单处理,通过浏览器请求带有的"User-Agent"划分浏览器和版本号,并针对新旧两种浏览器类型进行相应处理。例如:
· 指定浏览器、指定版本号,访问指定的页面资源。
· 划定浏览器新旧界限,通过此界限限制应用支持的浏览器版本,给予友好提示。
若文中存在错误和不足,欢迎指正!
本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!
本文标签: 模块浏览器Nginxngxhttpbrowsermodule
版权声明:本文标题:Nginx 浏览器模块(ngx_http_browser_module) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725801359a1043584.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论