nginx反向代理’/’的问题记录
问题记录
一个vue项目的前端,在登录时去请求另一个接口进行登录,请求时返回404,原因就是在请求www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3这个地址时,没有转发到www.b.com/login/v1/doLogin?loginName=test&passWord=e10adc3,所以才会返回一个404
解决方法
一开始考虑使用rewrite直接改写请求到www.b.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3,但是发现会出现跨域问题
location /forward/ {
rewrite /forward/(.*) http://www.b.com/$1 last;
}
这样配置会出现跨域,代码里已经对跨域做好了跨域设置,所以直接使用proxy_pass进行转发就可以,下面是正确的写法
location /forward/ {
proxy_pass https://www.b.com/;
}
这种写法可以将原请求的虚拟路径给去掉,即不带请求地址,如下: 源请求: www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3 转发后的请求: www.b.com/login/v1/doLogin?loginName=test&passWord=e10adc3
示例
源请求:www.a.com/test/api/index.html
写法一
location /test/ {
proxy_pass http://www.b.com;
}
原样转发
www.b.com/test/api/index.html
写法二
location /test/ {
proxy_pass http://www.b.com/;
}
后面加了一个/
,转发后的请求实际为:
#去掉了/test/这个路径
www.b.com/api/index.html
写法三
location /test/api/ {
proxy_pass http://www.b.com/;
}
转发后的请求实际为:
#把location匹配到的路径都给去掉了
www.b.com/index.html
写法四
location /test/api/ {
proxy_pass http://www.b.com/api;
}
转发后的请求为:
#拼接的是剩余部分的请求,所以会连到一起
www.b.com/apiindex.html
写法五
location /test/api/ {
proxy_pass http://www.b.com/api/;
}
转发后的请求为:
www.b.com/api/index.html
总结
总而言之,如果proxy_pass后面没有跟任何路径信息,那么反向代理的请求地址将包含location匹配到的部分。 如果proxy_pass后面有路径,那么反向代理的请求地址将进行拼接,拼接的形式为:proxy_pass后面的路径部分 加上 location匹配外的部分
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Advanced Level) Practice 1001 A B Format (20 分)
- 【Java】09 List 集合与 Collections 工具类
- PAT (Advanced Level) Practice 1003 Emergency (25 分)
- 数据结构严书习题6.65已知前中序,求二叉链表
- 【Java】10 Deque 接口
- 12.深入k8s:kubelet创建pod流程源码分析
- (较为详细)树的遍历方式一览(附完整源码可在VScode与cb运行)
- 【Java】12 Map 集合
- 【Java】11 Set 集合
- 4.表格-HTML基础
- 2.语义化-HTML进阶
- MATLAB 与 C 语言的混合编程
- leetcode树之二叉树的层平均值
- C++雾中风景15:聊聊让人抓狂的Name Mangling
- 【Java】15 File 类