nginx中location中关于proxy pass和rewrite的应用

                       

1,问题描述 

 upstream datacollectbackend{      #ip_hash;      server 10.234.1.211:6100 max_fails=5 fail_timeout=30s;      server 10.234.1.26:7100 max_fails=5 fail_timeout=30s;    }       location ~* ^/OCC_DATACO_WEB/.*$ {           include deny.conf;           proxy_pass http://datacollectbackend;           include proxy.conf;           error_log  logs/datacollection_error.log error;           access_log  logs/datacollection_access.log  main;       }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

现在就是觉得OCC_DATACO_WEB名字太长了,想换成dt,但是工程还没有上线,需要先做个测试,就是让www.ds.com/dt/possystem去调用OCC_DATACO_WEB工程里面去。

也就是说以前用www.ds.com/OCC_DATACO_WEB/possystem访问,现在改成www.ds.com/dt/possystem访问。但是线上工程还是OCC_DATACO_WEB,但是现在dt工程还没有做完,处于过渡期要等新的dt完善后在移除OCC_DATACO_WEB换成dt

原blog地址:http://blog.csdn.net/mchdba/article/category/5981097 ,未经过原csdn博主mchdba允许,不得转载。

2,用location的proxy_pass做跳转

直接将dt的跳转到和  OCC_DATACO_WEB一样的proxy_pass,如下所示

 location ~* ^/dt/.*$ {           include deny.conf;           proxy_pass http://datacollectbackend;           include proxy.conf;          error_log  logs/dt_error.log error;          access_log  logs/dt__access.log  main;        }   
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后重启nginx,通过www.ds.com/dt/possystem访问,结果报错如下:

Sorry,找不到该页面您使用的URL可能拼写有误,该页可能已经移动,或者它可能只是临时脱机。重新键入正确网址,或者返回首页
  
  
  • 1
  • 2
  • 3
  • 4

3,用rewrite来取代location

    location ~* ^/dt/.*$ {          rewrite /dt/(.*) /OCC_DATACO_WEB/$1 break;        }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
然后重启nginx,使用www.ds.com/dt/possystem访问,已经生效了,成功了。
  
  
  • 1

4,总结

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如 http://seanlook.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写。语法rewrite regex replacement [flag];

如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。
表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

执行server块的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

本次实践中,是需要将dt的工程访问都指向OCC_DATACO_WEB工程里面去,所以需要仅仅location加proxy_pass是不够的,需要rewrite的。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值