代理的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种情况相关推荐

  1. nginx 反向代理斜杠问题

    代理的8种情况 模拟请求 curl localhost:8081/test/person/getinfo 配置情况及对应代理结果 #配置1 Location /test/ {proxy_pass ht ...

  2. php一个入口 nginx 自动带斜线,Nginx 自动加斜杠

    在 Nginx 里面,目前的 WordPress 是这样子配置 rewrite 的: location / { if (-d wp-admin){ break; } if (-f $request_f ...

  3. 通过调试 Nginx 源码来定位有趣 Nginx 转发合并斜杠和编码问题

    背景 前段时间出现了一个请求在测试环境签名成功,在线上环境签名失败的情况,排查原因是线上url中有双斜杠会被合并成一个传给后端,在测试环境中不会出现.这个就比较神奇了,Nginx 版本完全一样. 确认 ...

  4. 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)

    SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者.消费者) 一.软件架构和微服务需求 1.1.微服务需求 1.2.框架选择 1.3.集群分布(下面为此图实 ...

  5. 反斜杠在C/C++中的作用

    由于最近好几次碰到反斜杠,不明白是什么意思,后来查了下,原来用的较多的是作为强制换行符,衔接上下两行的意思.有时候一个语句太长,一行写不下,或者显得不美观,为了便于阅读,可以将较长的语句拆分成两行甚至 ...

  6. C++续行符(反斜杠符号)

    原文:http://blog.csdn.net/zhu2695/article/details/9152069 参考一: 由于最近好几次碰到反斜杠,不明白是什么意思,后来查了下,原来用的较多的是作为强 ...

  7. Python中关于反斜杠(\)用法的总结

    首先,我们需要知道的是,在python中/所代表的是正斜杠,而\代表的是反斜杠.关于反斜杠的使用,我认为转义二字就是其用法的本质.转义,我的理解就是通过对反斜杠的使用,使字符.格式等与其原来意义不同, ...

  8. c语言反斜杠,掌握C++编程中反斜杠续行符的使用方法

    1) 用在宏定义中: #define CV_ARE_SIZES_EQ(mat1, mat2) \ ((mat1)->rows == (mat2)->rows && (mat ...

  9. php自动加反斜杠,处理php自动反斜杠的函数代码

    复制代码代码如下: //处理php自动反斜杠 if(get_magic_quotes_gpc()){ functionstripslashes_deep($value) { $value=is_arr ...

最新文章

  1. 每日一皮:好像有个Bug... 你看到了吗?
  2. Hook安卓项目内的字符串获取,用服务器的key value优先代替本地的key value
  3. [BUUCTF-pwn]——cmcc_pwnme1
  4. 十年磨一剑 | 淘宝如何打造承载亿级流量的首页?
  5. 以知乎为例子来说明MVC是个啥
  6. Xamarin.Android开发音乐播放器
  7. iOS相同字符串保存地址唯一
  8. 微信小程序背景音乐的调试
  9. dubbo是长连接还是短连接_游戏宅的亲身体验,手柄还是物理连接好:雷蛇骑仕游戏手柄体验...
  10. JavaScript学习笔记03【基础——对象(RegExp、Global)】
  11. vscode 实时运行代码插件 Quokka
  12. 什么是PT,PT和BT有什么不同?
  13. 最新·前端的工资分布情况 - 你拖后腿了吗?
  14. 从myspace数据库看分布式系统数据结构变迁
  15. 如何解决安卓手机抓包显示无网络/网络异常
  16. Centos7使用Docker部署Chemex资产管理系统
  17. 互联网思维是葵花宝典 不是“公公”学不了
  18. SETUNA2简介、下载和使用方法(截图贴图工具)
  19. 退役倒计时 | 2019CCPC厦门打铁游记
  20. Windows11桌面及桌面应用转移操作

热门文章

  1. scrapy由浅入深(三) selenium模拟爬取ajax动态页面(智联招聘)
  2. 《算法零基础100讲》(第11讲) 因子数
  3. XssChallege(一)
  4. 将导航栏固定到html底部(bootstrap)
  5. 通过seller_nick:店铺昵称获取京东店铺所有商品接口,京东店铺所有商品API接口,API接口返回参数接入方案
  6. Mybatis plus基础入门
  7. 置顶信息(不仅修改数据库,也完成了前台效果)
  8. PCB走线角度选择 — PCB Layout 跳坑指南
  9. 解决mac下adb devices命令找不到设备
  10. sql修改链接服务器名称,链接服务器详解 SQL Server