nginx代理去掉URl前缀

2023-10-31

今天接到一个配置nginx的需求是:需要访问某个域名时,nginx可以去掉前缀去代理访问到后端

正常配置情况下:
在nginx配置文件中中设置了 location /prod-api/api 时 浏览器访问 /prod-api/api 反向代理到后端服务后,后端服务接收到的url地址实际还是 /prod-api/api

需要实现的功能需求:
访问url路径/prod-api/api经过nginx反向代理后,到达后端服务的实际url地址为/api

以下是原nginx配置文件中location部分的配置内容:

server {
        listen 80;
        server_name localhost;
        charset utf-8;
         
        location / {
        root /usr/share/nginx/html/cashier;
        try_files $uri $uri/ /index.html;
        index index.html index.htm;
    }

    location /prod-api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:9076;
    }
       access_log /var/log/nginx/access.log main;
       error_log /var/log/nginx/error.log warn;
}

将上述代码修改为如下nginx location代码:

server {
        listen 80;
        server_name localhost;
        charset utf-8;
         
        location / {
        root /usr/share/nginx/html/cashier;
        try_files $uri $uri/ /index.html;
        index index.html index.htm;
    }

    location ^~/prod-api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:9076/;
    }
       access_log /var/log/nginx/access.log main;
       error_log /var/log/nginx/error.log warn;
}

注意点:

  • 在proxy_pass 反向代理地址最后加一个/
  • 在location匹配的url路径前添加^~/

location ^~/prod-api/:匹配任何以 /prod-api/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条

  • 不可以使用:proxy_set_header Host $http_host;

我在现有环境的nginx里添加这段配置之后,访问会转不过去,查看nginx日志也只能看到是404信息,并没有更多定位问题的信息。检查了许久也没找到原因,于是注释掉location 里面所有配置,里面只加proxy_pass这段配置,结果nginx是能够转发成功的,这说明单独来看这条location的配置是没有问题的,很有可能是现有环境nginx里的某些配置影响到了这个转发。

为了定位问题原因,location下的配置逐个注释来定位问题,最后发现当注释掉proxy_set_header Host $http_host ;这条配置之后,就能成功转发了。这才注意到是反向代理配置的问题。

此配置的作用是:把原http请求的Header中的Host字段也放到转发的请求里。
如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。

但是现有环境中原有的配置也不能随便删掉,所以可以进行如下设置:

即,在location里面添加一条 proxy_set_header Host $proxy_host;配置。

设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx代理去掉URl前缀 的相关文章

  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • PHP-FPM 和 Nginx:502 错误网关

    配置 Ubuntu 服务器 11 10 64 位 亚马逊AWS Ec2 托管在云上 t1 micro实例 在我写任何其他内容之前 我想声明我已经检查了两者nginx 502 错误网关 https stackoverflow com ques
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 如何使用 Nginx 将下划线替换为破折号

    我第一次使用Nginx 对它基本上一无所知 我需要将 100 多个 URL 中的 替换为 我想一定有一种简单的方法可以用 Nginx 来做到这一点 但在 Google 上找不到任何东西 Thanks Edit 我的网址例如 http www
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 拒绝框架 '',因为它违反了以下内容安全策略指令

    我们使用 Confluence Companion 工具在本地编辑 Confluence 中的文件 https confluence atlassian com doc edit files 170494553 html https con
  • JasperServer代理CSRF错误

    我在 Ubuntu 14 04 LTS 上使用捆绑的 Tomcat 和 Nginx 代理重新安装了 JasperReports Server 6 2 以便我可以访问https mydomain xyz jasperserver https
  • 如何在shell脚本中给出密码?

    在 shell 脚本文件中 我使用一些命令 例如scp and make install要求我输入密码 我运行一个 shell 脚本来编译一个大项目 一段时间后它会要求我输入密码才能使用scp 我需要等待该过程并在此之后提供密码 我只想通过
  • 如何在Linux中自动启动需要X的应用程序

    我试图在系统进入运行级别 5 时自动启动 X 应用程序 这样做的正确方法是什么 我写了一个脚本并将其放在 etc init d 中 我已运行适当的 chkconfig 命令来设置 etc rcX d 目录中的符号链接 一切工作正常 除了当我
  • 如何找到进程启动时使用的原始用户名?

    有一个 perl 脚本需要以 root 身份运行 但我们必须确保运行该脚本的用户最初没有以用户 foo 身份登录 因为它将在脚本运行期间被删除 那么 我如何查明自登录以来可能已多次起诉的用户是否在该链中的任何时间都没有模拟过 foo 我发现

随机推荐

  • 王者荣耀虚拟服务器设置方法,《王者荣耀》操作设置详解

    王者荣耀 操作设置详解 大神团 小风 发布于10 26 近期手游平台有一款名为 王者荣耀 其优质的MOBA体验让无数玩家爱不释手 而其中的操作模式更值得玩家去深究 究竟这款游戏的操作设置有何作用 玩家又该如何利用好操作模式 就一起来看看吧
  • flask无法创建数据库

    今天实操flask连接mysql的 就短短几行代码 弄得头都大 大概没有打代码的天赋吧 当我定义完这个模型类 跑程序 错误一 TypeError column got an unexpected keyword argument prima
  • 实战:windows如何双显示屏独立显示

    现实中 时常看到那些大佬们同时操作多个显示屏 感觉甚是带劲 于是我经过一番摸索 也找到了一条一台电脑两个显示屏独立显示的方法 再此记录一下 希望能帮到有需要的小伙伴 我的操作环境 一台普通笔记本 一个液晶显示屏 前提 你的笔记本或者台式机主
  • python编程:字典的典型应用:二级(多级)菜单,实现户籍省市的多层级选择

    一 编程题目 现实生活中我们经常要用到二级菜单或者多级菜单 下面我们以一个信息系统中关于户籍省市的选择利用字典来实现一个二级菜单 要求以下面的内容来定义二级菜单 广东省 广州市 珠海市 东莞市 惠州市 汕头市 湛江市 河源市 梅州市 湖南省
  • Elasticsearch密码配置(包括集群与单节点)

    ES单节点密码配置 1 修改配置文件 在配置文件中添加如下参数 xpack security enabled true xpack security transport ssl enabled true xpack license self
  • win7新建文本文档快捷键

    由于编者水平有限 文中难免会有错误和疏漏 请各位读者能提出宝贵建议或给予指正 可在博文下评论指出 我会及时改进 在此先感谢各位 本文是自己学习所做笔记 欢迎转载 但请注明出处 http blog csdn NET yijuanxia 环境
  • 快速了解日志概貌,详细解读13种日志模式解析算法

    云智慧 AIOps 社区是由云智慧发起 针对运维业务场景 提供算法 算力 数据集整体的服务体系及智能运维业务场景的解决方案交流社区 该社区致力于传播 AIOps 技术 旨在与各行业客户 用户 研究者和开发者们共同解决智能运维行业技术难题 推
  • 超级入门题:A+B

    这个题没什么好讲的 两个数 一个a 一个b 两数相加不超过int范围 求两数之和 include
  • bilibili老版本_哔哩哔哩5.13.0旧版本下载-bilibili5.13.0旧版本下载v5.13.0旧版本-西西软件下载...

    bilibili5 13 0旧版本是一款bilibili最近推出的up主动态评论的版本的前一款版本 这个版本相比较新版而言减少了up主评论动态显示 对于不少小伙伴来说 bilibili毕竟是一个用来看视频的地方 所以对于文字评论不怎么感冒
  • Java中只有值传递?一篇文章彻底弄懂

    新手上路 记录自己的理解 在C 中 函数传值有两种方式 即值传递和引用传递 而在Java中 只有值传递 即便传递的对象为引用类型 如String 所谓的值传递是指在调用函数时将实参复制一份传递到函数中 这样函数中操作的是实参的副本 不会对实
  • springboot将图片上传至七牛云服务器(超详细)

    我们在公司的业务开发中 经常会接触到图片上传功能 有很多小伙伴都会在这里遇坑 特别是将图片上传至七牛云服务器上 网上的很多讲解也都很不明确 那么今天我们就要来讲一讲如何将本地的图片上传至七牛云服务器上 配合步骤自己做一个小的demo吧 本文
  • VirtualBox 虚拟机里网络很慢的解决方法

    VirtualBox 升级到6 0 4 后发现这个问题 Mac 主机网速很快 但虚拟机 ubuntu 里网络很慢 首先尝试多种不同的网络连接模式 都不能解决 再回头调试 发现域名解析很慢 问题定位在 DNS 问题 ping 一下百度 15秒
  • 使用Python,OpenCV实现简单的场景边界/拍摄转换检测器

    使用Python OpenCV进行简单的场景边界 拍摄转换检测器 1 效果图 2 实现 2 1 步骤 2 2 什么是 场景边界 和 拍摄过渡 2 3 代码目录结构 2 源码 参考 这篇博客起源于朋友分享蝙蝠侠7更新了 而我没有办法去最近的书
  • Learing blockchain in go

    Windows下JetBrains GoLand环境配置记录 根据文末Reference 1 实现的迷你区块链 暂有 block chain pow UTXO 现在实现的bc存在double spending问题 并且创世区块和创世交易的哈
  • C++之合并两个链表

    题目 已有a b两个链表 每个链表中的结点包括学号 成绩 要求把两个链表合并 按学号升序排列 include
  • 程序员不擅长沟通???

    版权声明 原创作品 允许转载 转载时请务必以超链接形式标明文章原始出版 作者信息和本声明 否则将追究法律责任 本文地址 http blog csdn net jobchanceleo archive 2007 01 18 1487073 a
  • c++函数返回引用

    转自 http www cnblogs com floatedclouds archive 2011 10 13 2209917 html 1 什么是引用 引用就是变量的别名 操作一个变量的引用也就相当于操作变量本身 这一点跟指针很类似 但
  • Cursor,程序员的 AI 代码编辑助手

    相信大家都或多或少地听说过 了解过 chatGPT 半个月前发布的 GPT 4 可谓是 AI 赛道上的一个王炸 那么今天咸鱼给大家分享一个开源的 AI 代码编辑器 Cursor 让各位程序员在编程之路上一骑绝尘 介绍 Cursor 是一个人
  • minigui成功移植到ubuntu64位平台

    1 pc系统ubuntu14LTS 64bit 同时在32位ubuntu16 04上经过了测试 官方的所有范例程序都能运行 2 过两天会写份详细的移植教程 现在只是将移植好的文件上传到我的csdn下载 大家可以免费下载 3 做个简单的移植过
  • nginx代理去掉URl前缀

    今天接到一个配置nginx的需求是 需要访问某个域名时 nginx可以去掉前缀去代理访问到后端 正常配置情况下 在nginx配置文件中中设置了 location prod api api 时 浏览器访问 prod api api 反向代理到