Nginx 反向代理斜杠问题--代理的8种情况
代理的8种情况
模拟请求
curl localhost:8081/test/person/getinfo
配置情况及对应代理结果
#配置1
Location /test/ {
proxy_pass http://127.0.0.1:8000/api/;
}
# /api/ 替换 /test/person/getinfo 中的 /test/
对应结果 http://127.0.0.1:8000/api/person/getinfo
#配置2
Location /test {
proxy_pass http://127.0.0.1:8000/api;
}
# /api 替换 /test/person/getinfo 中的 /test
对应结果 http://127.0.0.1:8000/api/person/getinfo
#配置3
Location /test {
proxy_pass http://127.0.0.1:8000/api/;
}
# /api/ 替换 /test/person/getinfo 中的 /test
对应结果 http://127.0.0.1:8000/api//person/getinfo
#配置4
Location /test/ {
proxy_pass http://127.0.0.1:8000/api;
}
# /api 替换 /test/person/getinfo 中的 /test/
对应结果 http://127.0.0.1:8000/apiperson/getinfo
#配置5
Location /test/ {
proxy_pass http://127.0.0.1:8000/;
}
# / 替换 /test/person/getinfo 中的 /test/
对应结果 http://127.0.0.1:8000/person/getinfo
#配置6
Location /test/ {
proxy_pass http://127.0.0.1:8000;
}
# 不做替换
对应结果 http://127.0.0.1:8000/test/person/getinfo
#配置7
Location /test {
proxy_pass http://127.0.0.1:8000;
}
# 不做替换
对应结果 http://127.0.0.1:8000/test/person/getinfo
#配置8
Location /test {
proxy_pass http://127.0.0.1:8000/;
}
# / 替换 /test/person/getinfo 中的 /test
对应结果 http://127.0.0.1:8000//person/getinfo
分析结果
经过分析所有情况,发现其实就是用proxy_pass 端口后的内容去替换location地址 ,如果端口后没有内容则不做替换(斜杠也算内容)
eg:配置1,用http://127.0.0.1:8000/api/ 替换localhost:8081/test/person/getinfo ==> http://127.0.0.1:8000/api/person/getinfo
eg:配置4,用http://127.0.0.1:8000/api 替换localhost:8081/test/person/getinfo
==> http://127.0.0.1:8000/apiperson/getinfo
配置6、7比较特殊,端口后没有内容,所以只替换IP端口==>http://127.0.0.1:8000/test/person/getinfo
实际应用中,Nginx的斜杠会根据不同的代理地址,代理规则有所不同
第一种,只有域名+端口的方式
server {
listen 443 ssl;
location /app/ {
proxy_pass http://server1:8191;
}
}
--这两种匹配对/app/v1这个路径等效
server {
listen 443 ssl;
location /app {
proxy_pass http://server1:8191;
}
}
访问路径 http://nginx-server:80/app/v1
实际的代理路径为http://server1:8191/app/v1,直接理解为与location后面的匹配地址无关,直接就是proxy_pass 主机:端口+访问路径,此处访问路径为/app/v1
第二种,域名+端口+"/",后面再没有其他
--A类匹配
server {
listen 443 ssl;
location /app/ {
proxy_pass http://server1:8191/;
}
}
--B类匹配
server {
listen 443 ssl;
location /app {
proxy_pass http://server1:8191/;
}
}
访问路径 http://nginx-server:80/app/v1
对A类匹配实际的代理路径为http://server1:8191/v1,直接理解为取掉location后面的匹配/app/,剩余路径直接添加到后面,就是proxy_pass 主机:端口+访问路径,此处访问路径为/app/v1,去掉/app/剩余v1,直接添加到代理路径后面。
对B类匹配实际的代理路径为http://server1:8191//v1,直接理解为取掉location后面的匹配/app,剩余路径直接添加到后面,就是proxy_pass 主机:端口+访问路径,此处访问路径为/app/v1,去掉/app剩余/v1,直接添加到代理路径后面。
第三种,域名+端口+路径
-- A
server {
listen 443 ssl;
location /app/ {
proxy_pass http://server1:8191/app/v2;
}
}
-- B
server {
listen 443 ssl;
location /app {
proxy_pass http://server1:8191/app/v2;
}
}
访问路径 http://nginx-server:80/app/v1
A的匹配实际的代理路径为http://server1:8191/app/v2v1,直接理解为取掉location后面的匹配/app/,剩余路径直接添加到后面,就是proxy_pass 主机:端口+访问路径,此处访问路径为/app/v1,去掉/app/剩余v1,直接添加到代理路径后面。
B的匹配实际的代理路径为http://server1:8191/app/v2/v1,直接理解为取掉location后面的匹配/app,剩余路径直接添加到后面,就是proxy_pass 主机:端口+访问路径,此处访问路径为/app/v1,去掉/app剩余/v1,直接添加到代理路径后面。
总结
proxy_pass 主机+端口这种类型,后将访问地址直接加到后面即主机+端口+访问路径
proxy_pass 主机+端口+访问路径(包括根路径),需要去掉location后面的匹配路径,然后将剩余的添加到proxy_pass后面
Nginx 反向代理斜杠问题--代理的8种情况相关推荐
- nginx 反向代理斜杠问题
代理的8种情况 模拟请求 curl localhost:8081/test/person/getinfo 配置情况及对应代理结果 #配置1 Location /test/ {proxy_pass ht ...
- php一个入口 nginx 自动带斜线,Nginx 自动加斜杠
在 Nginx 里面,目前的 WordPress 是这样子配置 rewrite 的: location / { if (-d wp-admin){ break; } if (-f $request_f ...
- 通过调试 Nginx 源码来定位有趣 Nginx 转发合并斜杠和编码问题
背景 前段时间出现了一个请求在测试环境签名成功,在线上环境签名失败的情况,排查原因是线上url中有双斜杠会被合并成一个传给后端,在测试环境中不会出现.这个就比较神奇了,Nginx 版本完全一样. 确认 ...
- 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)
SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者.消费者) 一.软件架构和微服务需求 1.1.微服务需求 1.2.框架选择 1.3.集群分布(下面为此图实 ...
- 反斜杠在C/C++中的作用
由于最近好几次碰到反斜杠,不明白是什么意思,后来查了下,原来用的较多的是作为强制换行符,衔接上下两行的意思.有时候一个语句太长,一行写不下,或者显得不美观,为了便于阅读,可以将较长的语句拆分成两行甚至 ...
- C++续行符(反斜杠符号)
原文:http://blog.csdn.net/zhu2695/article/details/9152069 参考一: 由于最近好几次碰到反斜杠,不明白是什么意思,后来查了下,原来用的较多的是作为强 ...
- Python中关于反斜杠(\)用法的总结
首先,我们需要知道的是,在python中/所代表的是正斜杠,而\代表的是反斜杠.关于反斜杠的使用,我认为转义二字就是其用法的本质.转义,我的理解就是通过对反斜杠的使用,使字符.格式等与其原来意义不同, ...
- c语言反斜杠,掌握C++编程中反斜杠续行符的使用方法
1) 用在宏定义中: #define CV_ARE_SIZES_EQ(mat1, mat2) \ ((mat1)->rows == (mat2)->rows && (mat ...
- php自动加反斜杠,处理php自动反斜杠的函数代码
复制代码代码如下: //处理php自动反斜杠 if(get_magic_quotes_gpc()){ functionstripslashes_deep($value) { $value=is_arr ...
最新文章
- 每日一皮:好像有个Bug... 你看到了吗?
- Hook安卓项目内的字符串获取,用服务器的key value优先代替本地的key value
- [BUUCTF-pwn]——cmcc_pwnme1
- 十年磨一剑 | 淘宝如何打造承载亿级流量的首页?
- 以知乎为例子来说明MVC是个啥
- Xamarin.Android开发音乐播放器
- iOS相同字符串保存地址唯一
- 微信小程序背景音乐的调试
- dubbo是长连接还是短连接_游戏宅的亲身体验,手柄还是物理连接好:雷蛇骑仕游戏手柄体验...
- JavaScript学习笔记03【基础——对象(RegExp、Global)】
- vscode 实时运行代码插件 Quokka
- 什么是PT,PT和BT有什么不同?
- 最新·前端的工资分布情况 - 你拖后腿了吗?
- 从myspace数据库看分布式系统数据结构变迁
- 如何解决安卓手机抓包显示无网络/网络异常
- Centos7使用Docker部署Chemex资产管理系统
- 互联网思维是葵花宝典 不是“公公”学不了
- SETUNA2简介、下载和使用方法(截图贴图工具)
- 退役倒计时 | 2019CCPC厦门打铁游记
- Windows11桌面及桌面应用转移操作
热门文章
- scrapy由浅入深(三) selenium模拟爬取ajax动态页面(智联招聘)
- 《算法零基础100讲》(第11讲) 因子数
- XssChallege(一)
- 将导航栏固定到html底部(bootstrap)
- 通过seller_nick:店铺昵称获取京东店铺所有商品接口,京东店铺所有商品API接口,API接口返回参数接入方案
- Mybatis plus基础入门
- 置顶信息(不仅修改数据库,也完成了前台效果)
- PCB走线角度选择 — PCB Layout 跳坑指南
- 解决mac下adb devices命令找不到设备
- sql修改链接服务器名称,链接服务器详解 SQL Server