一.发现问题

配置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代理路径配置总结的更多相关文章

  1. 单机部署minio,设置Nginx代理,配置https(TLS)访问

    安装 下载地址:https://dl.min.io/ # 创建目录 mkdir -p /usr/local/minio/{data,bin,etc} # 下载minio wget https://dl ...

  2. nginx 访问路径配置

    比如: http://127.0.0.1/ 对应的物理路径 c:/a/b/c 比如:http://127.0.0.1/eec 访问的地址对应的物理路径: d:/a/b/c #user nobody; ...

  3. nginx文件路径配置(root|alias)

    nginx指定文件路径主要有两种方式:root|alias. 那么他们究竟有什么区别呢? 指令的使用方法和作用域: [root] 语法:root path 默认值:root html 配置段:http ...

  4. 在vue中如何使用WebSocket 以及nginx代理如何配置WebSocket

    WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信.浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输. 浏览器支持情况 现 ...

  5. 记录Nginx代理的配置

    server { listen  80; server_name localhost; location / { root    /ect/share/nginx/html; index   inde ...

  6. nginx 代理http配置实例

    #user nginx; worker_processes ; #error_log /var/log/nginx/error.log warn; #pid /var/run/nginx.pid; e ...

  7. Nginx使用和配置

    概要: Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用 Nginx 反向代理与负载均衡 Nginx 实现高速缓存 Nginx 性能参数调优 一.Nginx 简介与安装 Nginx ...

  8. nginx代理https站点(亲测)

    nginx代理https站点(亲测) 首先,我相信大家已经搞定了nginx正常代理http站点的方法,下面重点介绍代理https站点的配置方法,以及注意事项,因为目前大部分站点有转换https的需要所 ...

  9. 搭建sftp服务+nginx代理

    在公司,经常会用到sftp服务,比如两个公司对接生产项目,其中一方,要在sftp上上传pdf文件,另一方公司要在sftp服务器上用nginx代理直接下载pdf文件.下面就说说我在实际中应用到的sftp ...

随机推荐

  1. alg-最长公共子序列

    class Solution { public: std::string LongestCommonSubsequence(const std::string& s1, const std:: ...

  2. tf.nn.depthwise_conv2d 卷积

    tf.nn.depthwise_conv2d( input, filter, strides, padding, rate=None, name=None, data_format=None ) 参数 ...

  3. Levenshtein算法-比较两个字符串之间的相似度

    package com.sinoup.util;/** * Created by Administrator on 2020-4-18. */ /** * @Title: * @ProjectName ...

  4. GeoGebra的一些指令名字

    列举出老师上课提出的一些命令 比较不常见的命令 1.取得函数上一点的坐标值x(A).y(A).z(A) 2.复数指令real() imaginary() 复数中的虚数应该使用Alt+i打出 点的表示指 ...

  5. Python - 实现文件名自动更改,避免同名文件被覆盖的两个解决方法

    [原创]转载请注明作者Johnthegreat和本文链接. 在一些不多的数据下载和生成的时候,我们倾向于直接保存为文件,当我们修改某些参数后再一次运行时,之前运行时生成的文件就被覆盖了.为了解决这个问 ...

  6. Jmeter系列(3)- Jmeter安装目录介绍

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Jmeter安装目录说明 bin:包含 ...

  7. python 使用记录及问题

    编码问题 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(12 ...

  8. 【已解决】error setting certificate verify locations报错

    目录 1.问题描述 2.问题分析 3.解决方法 1.问题描述 在公司的电脑上从Github上clone项目的时候git黑窗口报错"error setting certificate veri ...

  9. 类内部装饰器的使用:property、classmethod与staticmethod

    1.property property是一种特殊的属性,可实现把函数名变为属性名使用.它可以在不改变类接口的前提下使用存取方法 (即读值和取值) 来修改数据的属性,property类有3个方法gett ...

  10. tp5--相对路径和绝对路径

    首先,我们要先明白相对路径和绝对路径的理论: 绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\window ...