阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx中location中关于proxy_pass和rewrite的应用

187次阅读
没有评论

共计 2371 个字符,预计需要花费 6 分钟才能阅读完成。

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.linuxidc/dt/possystem 去调用 OCC_DATACO_WEB 工程里面去。

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

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.linuxidc/dt/possystem 访问,结果报错如下:

Sorry,找不到该页面

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

3,用 rewrite 来取代 location

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

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

4,总结

rewrite 功能就是,使用 nginx 提供的全局变量或自己设置的变量,结合正则表达式和标志位实现 url 重写以及重定向。rewrite 只能放在 server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如 http://linuxidc.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 的。

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-01/126991.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2371字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中