nginx代理路径配置总结
一.发现问题
配置nginx代理的时候,发现location配置的路径和代理的上下文路径的组合不同,服务端接收到的uri的路径不同,导致了controller的RequestMapping匹配出现问题,所以就仔细研究了一下nginx路径配置的细节问题;
二.实验过程
关于nginx的location路径和proxy_pass代理的上下文路径细节问题,以下分为四种情况来说明:
所有请求nginx服务的url都为:http://192.168.0.105:8087/api/system/common/doLogin,
下面通过nginx配置的路径不同,来观察服务端接收到的uri是什么样的;
1.情况一:
location后的路径为“/api”,代理服务的上下文为空(http://192.168.0.105:8089),看下图:

服务端接收到的uri为:

这个结果说明代理的时候,按照请求路径中的/api匹配到了对应的代理,代理到服务端的时候,把请求的ip和port替换为代理服务的ip和port,而对应的uri则完全没有变化,是整体的复制过去。
请求nginx:http://192.168.0.105:8087/api/system/common/doLogin
Nginx代理替换之后:http://192.168.0.105:8089/api/system/common/doLogin
代理过程:将图中红色部分替换为绿色部分,其他都不变,然后发送到服务端:

2.情况二:
location后的路径为“/api”,代理服务的上下文为“/”(http://192.168.0.105:8089/),看下图:

服务端接收的uri为:

这个结果说明按照请求路径中的/api匹配到了对应的代理之后,把请求中的“/api”替换为代理服务上下文路径“/”,“/api”之后的路径不变,替换如下:
请求nginx:http://192.168.0.105:8087/api/system/common/doLogin
Nginx代理替换之后:http://192.168.0.105:8089/ /system/common/doLogin
代理过程:将红色的部分替换为绿色的部分,其他都不变,然后发送服务端:

3.情况三:
location后的路径为“/api/”,代理服务的上下文为空(http://192.168.0.105:8089),看下图:

服务端接收的uri为:

这个结果和情况一是一样的,按照请求路径中的/api/匹配到了对应的代理,代理到服务端的时候,把请求的ip和port替换为代理服务的ip和port,而对应的uri则完全没有变化,是整体的复制过去。
请求nginx:http://192.168.0.105:8087/api/system/common/doLogin
Nginx代理替换之后:http://192.168.0.105:8089/api/system/common/doLogin
代理过程:将红色部分替换为绿色部分,其他部分不变:

4.情况四:
location后的路径为“/api/”,代理服务的上下文为“/”(http://192.168.0.105:8089/),看下图:

服务端接收的uri为:

这个结果说明和情况二是一样的,按照请求路径中的/api/匹配到了对应的代理之后,把请求中的“/api/”替换为代理服务上下文路径“/”,“/api/”之后的路径不变,替换如下:
请求nginx:http://192.168.0.105:8087/api/system/common/doLogin
Nginx代理替换之后:http://192.168.0.105:8089/system/common/doLogin
代理过程:将红色部分替换为绿色部分,其他部分不变:

三.解决问题:
根据上述四种情况总结,归结为两种代理过程:
1.如果代理proxy_pass只有ip和port,没有上下文,则代理过程只替换掉nginx请求的ip和port,其他部分都不变,然后发送。
2.如果代理proxy_pass除了ip和port外,还有上下文,则代理过程中,除了替换ip和port之外,还会将location的路径替换为proxy_pass中的上下文, 然后将剩余的路径拼接,发送。
nginx代理路径配置总结的更多相关文章
- 单机部署minio,设置Nginx代理,配置https(TLS)访问
安装 下载地址:https://dl.min.io/ # 创建目录 mkdir -p /usr/local/minio/{data,bin,etc} # 下载minio wget https://dl ...
- nginx 访问路径配置
比如: http://127.0.0.1/ 对应的物理路径 c:/a/b/c 比如:http://127.0.0.1/eec 访问的地址对应的物理路径: d:/a/b/c #user nobody; ...
- nginx文件路径配置(root|alias)
nginx指定文件路径主要有两种方式:root|alias. 那么他们究竟有什么区别呢? 指令的使用方法和作用域: [root] 语法:root path 默认值:root html 配置段:http ...
- 在vue中如何使用WebSocket 以及nginx代理如何配置WebSocket
WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信.浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输. 浏览器支持情况 现 ...
- 记录Nginx代理的配置
server { listen 80; server_name localhost; location / { root /ect/share/nginx/html; index inde ...
- nginx 代理http配置实例
#user nginx; worker_processes ; #error_log /var/log/nginx/error.log warn; #pid /var/run/nginx.pid; e ...
- Nginx使用和配置
概要: Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用 Nginx 反向代理与负载均衡 Nginx 实现高速缓存 Nginx 性能参数调优 一.Nginx 简介与安装 Nginx ...
- nginx代理https站点(亲测)
nginx代理https站点(亲测) 首先,我相信大家已经搞定了nginx正常代理http站点的方法,下面重点介绍代理https站点的配置方法,以及注意事项,因为目前大部分站点有转换https的需要所 ...
- 搭建sftp服务+nginx代理
在公司,经常会用到sftp服务,比如两个公司对接生产项目,其中一方,要在sftp上上传pdf文件,另一方公司要在sftp服务器上用nginx代理直接下载pdf文件.下面就说说我在实际中应用到的sftp ...
随机推荐
- AJ学IOS 之微博项目实战(8)用AFNetworking和SDWebImage简单加载微博数据
AJ分享,必须精品 一:效果 没有图文混排,也没有复杂的UI,仅仅是简单的显示出微博数据,主要介绍AFNetworking和SDWebImage的简单用法 二:加载数据AFNetworking AFN ...
- SpringCloud入门(十): Config 统一配置中心
SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...
- Juli函数
- Golang Web入门(3):如何优雅的设计中间件
摘要 在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了.但是,在Web应用的开发中,我们还需要一些可以被扩展的功能. 因此,在设计框架的过程中,应该留出可以扩展的空间,比 ...
- java多线程3:原子性,可见性,有序性
概念 在了解线程安全问题之前,必须先知道为什么需要并发,并发给我们带来什么问题. 为什么需要并发,多线程? 时代的召唤,为了更充分的利用多核CPU的计算能力,多个线程程序可通过提高处理器的资源利用率来 ...
- Java中的OOM问题
OOM是什么 OOM全称"OutOfMemory",既内存溢出.我们知道,Java中的对象是在堆(heap)上创建的,当堆内存不足以为新创建的对象分配空间时,就会产生OutOfMe ...
- 永恒之蓝MS17010复现
MS17010复现 靶机win7:192.168.41.150 攻击kali: 192.168.41.147 扫描 通过auxiliary/scanner/smb/smb_ms17_010模块扫描 ...
- Java中集合的初等案例
我有五个学生,请把这个学生的信息储存到数组中,并遍历数组,获取得到每一个学生信息. 学生:Strdent 成员变量:name,age 构造方法:无参,带参 成员方法:getXxx()/setXxx() ...
- python 携程asyncio 实现高并发示例2
https://www.bilibili.com/video/BV1g7411k7MD?from=search&seid=13649975876676293013 import asyncio ...
- 一种特殊的生成器函数-Generator函数
本节的内容,是建立在iterator遍历器知识的基础上.所以希望还没有看上一节的内容的话,最好还是看一看,当然你如果熟悉iterator就没有那个必要了. 既然你都看到这里来了,就咱们就接着往下讲.. ...