Nginx HTTP User_agent
假设我这里有大量图像、CSS、javascript等静态文件,分别放在后端服务器 192.168.1.5 和 192.168.1.6上,那么我如何利用nginx的反向代理功能将不同的 http_user_agent 请求发送到指定的服务器上呢?如 "Mozilla" 转发到 192.168.1.5 ,MSIE 转发到 192.168.1.6 。
Nginx web 服务器支持if条件表达式,由此来跳转或者使用不同的配置变量。在本文中需要使用 $http_user_agent 变量,它标记了用户浏览器的类别,版本以及操作系统的一些信息
- if ( condition ){
- do_something
- }
- if ( $http_user_agent = "wget" ){
- do_something
- }
- if ( $http_user_agent ~ MSIE ){
- return 403;
- }
if指令会就检查后面表达式的值是否为真(true),如果为真,则执行后面大括号中的内容。以下是一些条件表达式的比较方法:
1、变量的完整比较可以使用=或!=操作符
2、 部分匹配可以使用正则表达式来表示,~或~*
3、~表示区分大小写
4、~*表示不区分大小写(firefox与FireFox是一样的)
5、!~与!~* 是取反操作,也就是不匹配的意思
6、检查文件是否存在使用 -f 或 !-f 操作符
7、检查目录是否存在使用-d或!-d操作符
8、检查文件,目录或符号连接是否存在使用-e或!-e操作符
9、检查文件是否可执行使用-x或!-x操作符
10、正则表达式的部分匹配可以使用括号,匹配的部分在后面可以用$1~$9变量代替,这些和apache一致。
例子:
编辑 /usr/local/nginx/conf/nginx.conf 文件
#vi /usr/local/nginx/conf/nginx.conf
设置upstream服务器:
- upstream myproxybackend {
- server 192.168.1.1;
- server 192.168.1.2;
- server 192.168.1.3;
- server 192.168.1.4;
- }
- upstream msiebackend {
- server 192.168.1.6;
- }
- upstream mozillabackend {
- server 192.168.1.5;
- }
更新虚拟主机配置文件
- server {
- access_log logs/access.log;
- error_log logs/error.log;
- index index.html;
- listen 202.54.1.5:80 default;
- root /usr/local/nginx/html;
- server_name example.com www.example.com 0.example.com;
- ## PROXY - Web
- location / {
- proxy_pass http://myproxybackend;
- if ($http_user_agent ~ MSIE ) {
- proxy_pass http://msiebackend;
- }
- if ($http_user_agent ~ Mozilla ) {
- proxy_pass http://mozillabackend;
- }
- proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
- # many more...
- # many more...
- }
最后重启/重新载入nginx
- #/usr/local/nginx/sbin/nginx -s reload
转载于:https://www.cnblogs.com/jouny/p/4134710.html
Nginx HTTP User_agent相关推荐
- Logstash 参考指南(使用Filebeat Modules配置示例)
使用Filebeat Modules配置示例 本节中的示例展示了如何构建用于解析Filebeat模块收集的数据的Logstash管道: Apache 2日志 本例中的Logstash管道配置展示了如何 ...
- nginx lua 小项目:根据 user_agent 显示不同的页面,附带和 php 性能的对比
怎么快速学习一门新的语言呢? 如果你已经熟练掌握了一门语言,那么其他语言都是想通的.一个小小的需求,可能会遇到很多问题,但是搜索相关的关键字,就能快速实现出来,完成一个小目标,事半功倍. 死记硬背手册 ...
- nginx中不同client设置User-Agent与user_agent的坑
最近发现nginx内部用lua获取user_agent,得到的是一个table值,很奇怪,自己测试记录一下: 1.nginx配置 location /zcy/hello {set_by_lua $re ...
- Nginx配置——禁止指定user_agent
用途 你的网站访问量很大,而且服务器资源比较紧缺,因为我们的成本要稍微控制地严谨一点,所以呢,服务器稍微有点吃力,那么,网站呢它都会被搜索引擎的蜘蛛去爬取,它们去爬取的时候呢,跟咱们真人访问的行为是一 ...
- 测试nginx网站代码_在40行以下代码中使用NGINX进行A / B测试
测试nginx网站代码 by Nitish Phanse 由Nitish Phanse 在40行以下代码中使用NGINX进行A / B测试 (A/B testing with NGINX in und ...
- Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理
2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...
- Nginx防盗链、访问控制、Nginx解析PHP相关配置、Nginx代理
2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 在配置文件里写入以下内容: 用curl测试 访问控制 Nginx限制某些IP不能访问或者只允许某些IP访问. ...
- nginx 及 php 配置
一. 配置nginx启动脚本以及nginx.conf 编写启动脚本 vim /etc/init.d/nginx //加入内容 #!/bin/bash # chkconfig: - 30 21 # de ...
- 转: 基于elk 实现nginx日志收集与数据分析
原文链接:https://www.cnblogs.com/wenchengxiaopenyou/p/9034213.html 一.背景 前端web服务器为nginx,采用filebeat + logs ...
最新文章
- C语言中do...while(0)用法小结
- 【干货】美拍App是如何9个月做到用户过亿的
- 无忧企业系统的getshell
- Android缓存学习入门(二)
- git repo使用心得
- 反序列化时恢复transient字段
- JavaScript 的这个难点,毁掉了多少程序员?
- UVA12439 February 29【日期计算】
- bit, byte, KB, GB, TB, PB, EB, ZB, YB, BB, NB, DB, CB, XB
- 什么样的终端才是最合适桌面虚拟化的呢?
- Spring Cloud学习笔记---一分钟知晓Zuul
- AD09由英文改中文菜单步骤
- SpringCloud Greenwich版本集成OAuth2.0
- java 后台接受json参数的几种方式_java后台发送及接收json数据
- crypto.js 前端加解密
- javascript之dom详细笔记加练习
- C语言数组——一维数组实例详解
- C盘空间不足,UE4的deriveddatacache目录位置修改
- 数据分析/机器学习 350+ 数据集链接整理,免费下载点开就用
- 分布式-全局唯一id