为什么我的 Nginx 反向代理执行 301 重定向而不是代理?

2024-03-26

我在 docker 容器内有一个 Nginx 反向代理,它监听端口 3000 并暴露给 3002:docker run -p "3002:3000" ....

这个想法是这个反向代理将代理/my-app到我的笔记本电脑中在端口 8080 上运行的实例;和/my-app/api到云实例,在https://my-domain.

这是配置:

upstream my-laptop {
  server host.docker.internal:8080; # this is a magic hostname for the laptop's IP address.
  keepalive 64;
}

upstream cloud {
  server my-domain.com:443;
  keepalive 64;
}

server {
    listen       3000;

    include ssl/ssl-certs.conf;
    include ssl/ssl-params.conf;

    location /my-app {
        proxy_pass http://my-laptop;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /my-app/api {
        proxy_pass https://cloud;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    ...
}

问题是:

  1. 当我击中https://localhost:3002/my-app我收到 301 回复/my-app/(尾部斜杠)。我不知道这是为什么。本地应用程序实例显示在浏览器中,所以我想我可以让它暂时滑动?
  2. 当我击中https://localhost:3002/my-app/api/students,我收到 301 响应https://cloud/my-app/api/students。当然,这会导致 CORS 问题,并且端点不会返回数据。

现在,我已经配置了几次反向代理,所以我完全震惊了,我没有看到什么问题,这不是我第一次。

我尝试过使用上游 proxy_set_header 与我为不同应用程序使用的另一个反向代理进行比较;我没主意了。

我究竟做错了什么?


尽管提问者的配置没有这个特定问题,但尾随斜杠问题也可能导致重定向而不是代理,如中所述the docs http://nginx.org/en/docs/http/ngx_http_core_module.html#location:

如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pa​​ss 或 grpc_pass 之一处理,则执行特殊处理。为了响应 URI 等于此字符串但没有尾部斜杠的请求,将返回带有代码 301 的永久重定向到所请求的 URI,并附加斜杠。如果不需要这样做,可以像这样定义 URI 和位置的精确匹配:

location /user/ {
   proxy_pass http://user.example.com;
}

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

为什么我的 Nginx 反向代理执行 301 重定向而不是代理? 的相关文章

随机推荐

  • Winforms DataGridView 中的超链接单元格

    我有一个包含以下数据的 datagridview ContactType Contact Phone 894356458 Email email protected cdn cgi l email protection 在这里 我需要显示数
  • 是否可以为每个商店定义 Magento 布局更新

    我有一个 Magento 安装运行两个不同的网站 一个销售电子书 另一个不销售 因此业务团队希望看到 我的下载 链接从应用程序 我的帐户 区域的客户导航块中删除 我可以看到 design frontend base layout downl
  • AttributeError:模块“keras.engine”没有属性“input_layer”

    我正在尝试使用谷歌colab 但我一直遇到 keras 的问题 它说 AttributeError 模块 keras engine 没有属性 input layer 然而 检查他们的github库 keras engine中有一个input
  • go build 与 strip 的 golang strip 符号

    为什么剥离符号不同strip and go build ldflags s w see here https stackoverflow com questions 29599209 how to build a release versi
  • Android:startActivityForResult 的 resultCode 总是为 0? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 由于某种原
  • 在rails控制台中查看回滚错误的原因

    我正在尝试通过 Rails 控制台更新记录 但收到回滚错误 Project find 118 update attributes featured gt true Project Load 2 6ms SELECT projects FRO
  • 从下到上显示活动

    我想展示一个activity到另一个从下到上的动画使用Intent 给我一些例子 如下所示 Intent i2 new Intent main this test class startActivity i2 从下到上有动画 在 res a
  • Linq - 在列表中按周分组

    我想按周对我的数据进行分组 如下所示 var result stats GroupBy i gt SqlFunctions DatePart week i date Select g gt new ReportModel clicks g
  • 如何计算两个单词之间的相似度以检测它们是否重复?

    我有两个单词 我想计算它们之间的相似度 以便对它们是否重复进行排名 如何使用深度学习 NLP 方法实现这一目标 这里有一些解决文本相似性的方法 基于字符串的方法 给定 2 个句子字符串计算余弦相似度 https stackoverflow
  • array_key_exists 不起作用

    array key exists 不适用于大型多维数组 对于前 arr array 1 gt 10 2 gt array 21 gt 21 22 gt 22 23 gt array test gt 100 231 gt 231 3 gt 3
  • 嵌入时间线中的多个推特提要

    我现在正在开发一个网站 其中会有多个公司简介 每个个人资料都需要有一个 Twitter feed 并且在每个 feed 中我需要能够包含至少 2 个 Twitter 用户的推文 正在分析的公司和网站的 feed 本身 可能还有第三个 我有点
  • 提示用户输入密码 - Google OpenID Connect

    我们正在尝试将 Google 的 OpenID Connect 用于商业网络应用程序 但担心用户会使应用程序保持打开状态 并且未经授权的用户将登录 因为用户仍然登录到 Google 因此 OpenID Connect 只是让他们直接登录 W
  • 如何从多个线程同时访问MySQL

    我们正在对 MySQL 进行一个小型基准测试 希望了解它对我们的数据的执行情况 该测试的一部分是看看当多个并发线程用各种查询攻击服务器时它是如何工作的 The MySQL 文档 http dev mysql com doc refman 5
  • 如何使用rest api将数据集作为csv文件导入到power bi?

    我想在 power bi 中自动执行导入过程 但我找不到如何将 csv 文件发布为数据集 我正在为此使用 C 解决方案 有没有办法做到这一点 您无法将 CSV 文件直接导入到 Power BI 服务中已发布的数据集 AddRowsAPIEn
  • 如果时区设置为“UTC”,SimpleDateFormat 会忽略“XXX”

    我正在尝试按以下格式将当前日期时间输出为 UTC 2016 01 11T14 08 42 00 00 final SimpleDateFormat formatter new SimpleDateFormat yyyy MM dd T HH
  • PHP 的项目结构

    我是 PHP 新手 想了解 php 项目的目录结构 我有Java方面的经验 在java中我们有src包含java源文件 WEB INF包含lib和jsp页面 PHP 中有类似的标准目录结构吗 我们在 php 中也有分层吗 就像我们在 jav
  • Python 现在或将来会弃用“pytz”吗?

    pytz https pytz sourceforge net 用于Django 版本 选择当前时区 https docs djangoproject com en 3 2 topics i18n timezones selecting t
  • MYSQL 使用空间索引

    我正在尝试利用空间索引 我有一个 ip 表和一个包含 ip 块范围的 ip2geo 表 我正在尝试将 Geo ID 分配给 ip2geo 表中的每个 ip 当尝试使用列值进行选择时 空间索引不会被使用 EXPLAIN SELECT SELE
  • 为什么通过 AJAX 发送此 POST 变量为 Null? (jquery/php)

    该 JavaScript 用于 加载更多 功能 当单击按钮 moreg 时 它会从 load php 中获取固定数量的元素 function moreg click load var countg 1 load function load
  • 为什么我的 Nginx 反向代理执行 301 重定向而不是代理?

    我在 docker 容器内有一个 Nginx 反向代理 它监听端口 3000 并暴露给 3002 docker run p 3002 3000 这个想法是这个反向代理将代理 my app到我的笔记本电脑中在端口 8080 上运行的实例 和