我们都知道nginx是可以做跨域代理的:

location ^~ /visited-path/ {
proxy_pass http://another-domain/;
}

举个例子:假如我们的代理服务器域名为proxy.com

location ^~ /external/log {
proxy_pass http://proxy.com/log;
}

以上代理设置,将对当前server访问的location中,包含有external/log的访问,全部都代理到了http://proxy.com/log这个跨域地址上。

现在有一个需求是:根据要访问的地址的不同,而改变代理服务器的地址。比如说我有三台或更多代理服务器,地址分别为proxy1.com、proxy2.com、proxy3.com…,那么我要根据访问路径external/log1、external/log2、external/log3…来确定访问哪台代理服务器。比如:当路径为external/log1时访问proxy1.com,当路径为external/log2时访问proxy2.com…

这里推荐一种方式,使用正则来进行判断,nginx支持在proxy_pass中使用正则的分组匹配结果:

location ~* /visited-path/(.+?)/(.*) {
resolver your-dns-srever-ip;
proxy_pass http://the_left_domain_string$1the_rest_domain_string/$2?$args;
}

按照我们之前举的例子就是:

location ~* /external/log(.+?)/(.*) {
#resolver根据实际修改,可通过查看计算机网络配置查看dns配置信息
resolver 192.168.0.1;
proxy_pass http://proxy$1.com/$2?$args;
}

注意不可以缺少最后的$args,不然会报proxy_pass配置出错。

注意不可以缺少resolver地址,或地址配置不正确,否则会报无法resolve地址的错误。

这样配置以后,当我们访问 http://original-domain/external/log2/sub-path?a=1这个路径的时候,nginx就会自动代理为:http://proxy2.com/sub-path?a=1

nginx代理跨域,根据路径参数改变目标服务器地址的更多相关文章

  1. nginx代理跨域(mac)

    首先找到nginx.conf文件,修改并添加如下配置 html 文件 <!DOCTYPE html> <html lang="en"> <head&g ...

  2. axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器

    1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...

  3. 使用nginx代理跨域,使用nginx代理bing的每日一图

    前言 自从搞清楚了跨域原理后一直自鸣得意,感觉跨域没啥问题了.而事实上对关于跨域的几个header的理解也有限,但那又如何,我能做到跨域就行了.今天想把博客背景图改成bing的每日一图,发现遇到跨域问 ...

  4. nginx 代理跨域

    跨域 nginx设置http{ add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X- ...

  5. eclipse加速/Nginx配置跨域代理

    下班时间到啦! --下班都是他们的,而我,还是什么都没有. eclipse加速 去掉包含js文件的包的js验证,否则每次启动都需要进行校验(右击项目->properties) Nginx配置跨域 ...

  6. CORS跨域与Nginx反向代理跨域优劣对比

    最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...

  7. 前端笔记之Vue(五)TodoList实战&拆分store&跨域&练习代理跨域

    一.TodoList 1.1安装依赖 安装相关依赖: npm install --save-dev webpack npm install --save-dev babel-loader babel- ...

  8. 使用http-proxy-middleware 代理跨域

    使用http-proxy-middleware 代理跨域 例如请求的url:“http://f.apiplus.cn/bj11x5.json” 1.打开config/index.js,在proxyTa ...

  9. nginx解决跨域(前后端分离)

    Nginx解决跨域问题 后端接口 请求地址 返回数据(json数据) http://127.0.0.1:8080//app Hello World! 前端代码 通过nginx做静态资源服务器访问端口8 ...

随机推荐

  1. MVC5用户控件

    1. 添加一个model,用于给用户控件传递数据: 2.添加一个部分视图 . 3. 部分视图中,引入model,用于传递数据 4. 在要插入用户控件的地方,这样写 @Html.Partial(&quo ...

  2. [考试反思]0918csp-s模拟测试46:残存

    我... 行吧大概说说. T1打的n2dp,什么随机化什么改变读入顺序都能AC. 没想优化.打了个链表优化dp.不知为何WA了. T2读错题,死了. T3的50分暴力没来得及优化感觉思路很神仙(然而并 ...

  3. 「刷题」卡特兰数&prufer序列

    1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可 ...

  4. CSPS模拟 57

    rank4大众rank T1 天空龙 让他自由翱翔吧 T2 巨神兵 对于n=10的测试点本可以打出非常优秀的分层状压 但是没有打出来,因为对拓扑图理解不够深刻,纠结于指回的边,实际上只关注伸出的边就可 ...

  5. CSPS模拟 56

    前十基本都A题了,只有$Dybala$.$Naito$和弱比$yxs$没有A题 $T1 Merchant$ 明明学过$nth element$但是由于不懂原理导致我用了个鬼畜的${U队}$来维护前$K ...

  6. C++STL整理

    STL整理 vector #include<bits/stdc++.h> #define go(i,a,b) for(int i=a;i<b;i++) using namespace ...

  7. apache+php+mysql搭建php环境

    1.首先准备解压包:zend-loader-php5.6-windows-x86_update1(nts版).php-5.6.37-nts-Win32-VC11-x86.mysql-5.5.19-wi ...

  8. 关于数论分块里r=sum/(sum/l)的证明!

    今天的模拟赛里T2要使用到数论分块,里面有一个重要的坎就是关于r=sum/(sum/l)的证明,网上关于这道题的题解里都没有关于这个的证明,那么我就来填补一下: 在以下的文章里,我都会使用lo(x)表 ...

  9. ARM7中断的理解

    谈谈对中断的理解?   中断是计算机中处理异步事件的重要机制      中断触发的方式:       1)中断源级设置          按键:(CPU之外的硬件)               设置中 ...

  10. python while指令

    while指令 1.它后面可以带一个 Ture 表示一直是真的,这样程序会在while循环里无限进行下去 eg: while Ture: print("打印这个...") 2.它后 ...