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;
       }

现在就是觉得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;
        }   

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

Sorry,找不到该页面

您使用的URL可能拼写有误,该页可能已经移动,或者它可能只是临时脱机。
重新键入正确网址,或者返回首页

3,用rewrite来取代location

    location ~* ^/dt/.*$ {
          rewrite /dt/(.*) /OCC_DATACO_WEB/$1 break;

        }
然后重启nginx,使用www.ds.com/dt/possystem访问,已经生效了,成功了。

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的。

时间: 2024-10-25 09:25:42

nginx中location中关于proxy_pass和rewrite的应用的相关文章

nginx中location中的

http://blog.sina.com.cn/s/blog_647a022e01016140.html http://bbs.csdn.net/topics/330099906 http://www.cnblogs.com/AaronLi/archive/2011/09/02/2164355.html http://blog.csdn.net/qiluluwawa/article/details/8096110 http://bbs.csdn.net/topics/390943510 http

转:NGINX中的proxy_pass和rewrite

章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6807081.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点,如有不当,欢迎指正. --- rewrite syntax: rewrite regex replacement [flag] Default: - Context: server, location, if 如果正则表达式(regex)匹配到了请求的URI(request URI),这个URI会被后面

nginx虚拟路径中proxy_pass对后端请求的影响

假设nginx中的配置是这样的: server { listen 80; server_name x.x.x.x; . . . . . . location /subdir { proxy_pass http://y.y.y.y; } } 那么,当用户请求http://x.x.x.x/subdir/other时,匹配到该区块,nginx反向代理到后端时会保留虚拟路径.nginx实际向后端发起的请求URL为http://y.y.y.y/subdir/other. 假设nginx中的配置是这样的:

nginx 中location和root,你确定真的明白他们关系?

最近公司开发新项目,web server使用nginx,趁周末小小的研究了一下,一不小心踩了个坑吧,一直404 not found!!!!!当时卡在location和root中,但是网上却比较少聊这方面的关系,一般都是聊location匹配命令(这里可以看看http://www.nginx.cn/115.html),花了一下午,彻底搞清楚了location和root到底怎样找到文件的. nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中

nginx利用location匹配url中?号后的参数

nginx利用location匹配url中?号后的参数 http://www.baidu.com/index.php?a=1&b=2location能匹配到url,但是匹配不到url后面的参数,例如:?a=1&b=2 需求:访问地址:https://www.aposoft.com/all-apowersoft/?from=edm 开发要求可不可以只是这个完整地址https://www.aposoft.com/all-apowersoft/?from=edm 跳转到404,然后https:/

转:Nginx 配置 location 总结及 rewrite 规则写法

转: http://www.linuxidc.com/Linux/2015-06/119398.htm 1. location正则写法 一个示例: location =/{ # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location /{ # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/{ # 匹配任何以 /do

nginx配置location总结及rewrite规则写法

https://segmentfault.com/a/1190000002797606 location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents

nginx配置location总结及rewrite规则写法(2)

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

nginx配置location及rewrite规则重写

一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ c