假设我这里有大量图像、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 变量,它标记了用户浏览器的类别,版本以及操作系统的一些信息

[html] view plaincopy
  1. if ( condition ){
  2. do_something
  3. }
  4. if ( $http_user_agent = "wget" ){
  5. do_something
  6. }
  7. if ( $http_user_agent ~ MSIE ){
  8. return 403;
  9. }

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服务器:

[html] view plaincopy
  1. upstream myproxybackend  {
  2. server 192.168.1.1;
  3. server 192.168.1.2;
  4. server 192.168.1.3;
  5. server 192.168.1.4;
  6. }
  7. upstream msiebackend  {
  8. server 192.168.1.6;
  9. }
  10. upstream mozillabackend  {
  11. server 192.168.1.5;
  12. }

更新虚拟主机配置文件

[html] view plaincopy
  1. server {
  2. access_log  logs/access.log;
  3. error_log   logs/error.log;
  4. index       index.html;
  5. listen      202.54.1.5:80 default;
  6. root        /usr/local/nginx/html;
  7. server_name example.com www.example.com 0.example.com;
  8. ## PROXY - Web
  9. location / {
  10. proxy_pass  http://myproxybackend;
  11. if ($http_user_agent ~ MSIE ) {
  12. proxy_pass  http://msiebackend;
  13. }
  14. if ($http_user_agent ~ Mozilla ) {
  15. proxy_pass  http://mozillabackend;
  16. }
  17. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
  18. # many more...
  19. # many more...
  20. }

最后重启/重新载入nginx

[html] view plaincopy
  1. #/usr/local/nginx/sbin/nginx -s reload

转载于:https://www.cnblogs.com/jouny/p/4134710.html

Nginx HTTP User_agent相关推荐

  1. Logstash 参考指南(使用Filebeat Modules配置示例)

    使用Filebeat Modules配置示例 本节中的示例展示了如何构建用于解析Filebeat模块收集的数据的Logstash管道: Apache 2日志 本例中的Logstash管道配置展示了如何 ...

  2. nginx lua 小项目:根据 user_agent 显示不同的页面,附带和 php 性能的对比

    怎么快速学习一门新的语言呢? 如果你已经熟练掌握了一门语言,那么其他语言都是想通的.一个小小的需求,可能会遇到很多问题,但是搜索相关的关键字,就能快速实现出来,完成一个小目标,事半功倍. 死记硬背手册 ...

  3. nginx中不同client设置User-Agent与user_agent的坑

    最近发现nginx内部用lua获取user_agent,得到的是一个table值,很奇怪,自己测试记录一下: 1.nginx配置 location /zcy/hello {set_by_lua $re ...

  4. Nginx配置——禁止指定user_agent

    用途 你的网站访问量很大,而且服务器资源比较紧缺,因为我们的成本要稍微控制地严谨一点,所以呢,服务器稍微有点吃力,那么,网站呢它都会被搜索引擎的蜘蛛去爬取,它们去爬取的时候呢,跟咱们真人访问的行为是一 ...

  5. 测试nginx网站代码_在40行以下代码中使用NGINX进行A / B测试

    测试nginx网站代码 by Nitish Phanse 由Nitish Phanse 在40行以下代码中使用NGINX进行A / B测试 (A/B testing with NGINX in und ...

  6. Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理

    2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...

  7. Nginx防盗链、访问控制、Nginx解析PHP相关配置、Nginx代理

    2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 在配置文件里写入以下内容: 用curl测试 访问控制 Nginx限制某些IP不能访问或者只允许某些IP访问. ...

  8. nginx 及 php 配置

    一. 配置nginx启动脚本以及nginx.conf 编写启动脚本 vim /etc/init.d/nginx //加入内容 #!/bin/bash # chkconfig: - 30 21 # de ...

  9. 转: 基于elk 实现nginx日志收集与数据分析

    原文链接:https://www.cnblogs.com/wenchengxiaopenyou/p/9034213.html 一.背景 前端web服务器为nginx,采用filebeat + logs ...

最新文章

  1. C语言中do...while(0)用法小结
  2. 【干货】美拍App是如何9个月做到用户过亿的
  3. 无忧企业系统的getshell
  4. Android缓存学习入门(二)
  5. git repo使用心得
  6. 反序列化时恢复transient字段
  7. JavaScript 的这个难点,毁掉了多少程序员?
  8. UVA12439 February 29【日期计算】
  9. bit, byte, KB, GB, TB, PB, EB, ZB, YB, BB, NB, DB, CB, XB
  10. 什么样的终端才是最合适桌面虚拟化的呢?
  11. Spring Cloud学习笔记---一分钟知晓Zuul
  12. AD09由英文改中文菜单步骤
  13. SpringCloud Greenwich版本集成OAuth2.0
  14. java 后台接受json参数的几种方式_java后台发送及接收json数据
  15. crypto.js 前端加解密
  16. javascript之dom详细笔记加练习
  17. C语言数组——一维数组实例详解
  18. C盘空间不足,UE4的deriveddatacache目录位置修改
  19. 数据分析/机器学习 350+ 数据集链接整理,免费下载点开就用
  20. 分布式-全局唯一id

热门文章

  1. 7个你可能不认识的CSS单位
  2. struts文件上传时异常问题
  3. 设置asp.net网站的信任等级
  4. 二叉树的深度优先和广度优先遍历
  5. s5-13 RIP 为什么会 衰败
  6. linux固定分辨率,如何锁定分辨率
  7. 二叉树已知先序和中序输出后序
  8. 深度技术揭秘 | 大促狂欢背后,如何有效评估并规划数据库计算资源?
  9. AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代
  10. mPaas-WKWebview网络拦截常见问题