nginx 和带有代理传递的尾部斜杠

2024-01-01

我对 nginx 1.4.1 使用以下配置:



server {
    listen       8000;
    server_name  correct.name.gr;

    location /test/register {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1;
    }
}

  

我想做的是当用户访问时http://correct.name.gr:8000/test/register/它们应该被代理到在端口 80 上运行的 apache。

当我访问时http://correct.name.gr:8000/test/register/我得到正确的结果(index.php)。 当我访问时http://correct.name.gr:8000/test/register/asd我得到了正确的结果(来自 apache 的 404)。 当我访问时http://correct.name.gr:8000/test/asd我得到了正确的结果(来自 nginx 的 404)。 当我访问时http://correct.name.gr:8000/test/register123我得到了正确的结果(来自 apache 的 404)。

问题是当我访问时http://correct.name.gr:8000/test/register。我收到 301 响应并被重定向到http://localhost/test/register/(注意尾部斜杠,当然还有“localhost”)!!!

我没有对 nginx 进行任何其他配置来添加尾部斜杠或类似的内容。你知道问题是什么吗?我想http://correct.name.gr:8000/test/register通过代理到 apache 来正常工作(或者如果不可能,至少发出 404 错误而不是重定向到用户的本地主机)。

Update 1: 我试过http://correct.name.gr:8000/test/register来自与我昨天出现不良行为的计算机不同的计算机.. 好吧,它起作用了:我刚刚收到 301 响应,该响应向我指​​出了正确的位置http://correct.name.gr:8000/test/register/!怎么可能在一台计算机上工作,但在另一台计算机上却不能工作(我在两台计算机上使用相同的浏览器 Chrome)?明天我将再次尝试从第三个测试中观察其行为。

谢谢 !


我的猜测是你的上游服务器(apache 或你的脚本)触发了重定向到absolute url http://localhost/test/register/。因为你使用http://127.0.0.1在你的proxy_pass指令,nginx 没有找到匹配的域名并返回Location标题原样。

我认为正确的解决方案是如果重定向到内部 url,则不要使用绝对重定向。这始终是一个很好的做法。

然而,在不改变上游服务器的情况下,有两种快速解决方案。

您可以使用

proxy_pass http://localhost;

这将告诉nginx上游的域名是localhost。然后nginx就会知道要替换http://localhost by http://correct.name.gr:8000当它在中找到该部分时Location来自上游的标头。

另一种是添加一个proxy_redirect强制 nginx 重写任何位置标头的行http://localhost/ in it.

 proxy_pass http://127.0.0.1;
 proxy_redirect http://localhost/ /;

我更喜欢第一个解决方案,因为它更简单。使用时没有 DNS 查找开销proxy_pass http://localhost;因为 nginx 在启动 Web 服务器时会提前进行查找。

参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

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

nginx 和带有代理传递的尾部斜杠 的相关文章

  • 如何将 POST 请求内容保存为 .NET 中的文件 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个客户端应用程序POST请求a
  • Node.JS Web 服务器中的安全性

    所以 我正在学习 Node JS 到目前为止我很喜欢它 我已经有几个项目在工作了 我想我可以在其中使用nodejs 不过 我担心安全问题 如果我使用 Node JS http 模块编写自定义 Web 服务器 我是否可能非常容易受到攻击 Ap
  • 对于非文本媒体类型,发送带有 Content-Type 标头的字符集参数是否绝对错误?

    我发现了两个软件之间的错误 其中一个正在发出标头 Content Type application x bittorrent charset utf 8 另一个是错误地处理这个问题 但如果删除 charset 参数 则可以正确处理它 我需要
  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • 使用 NGINX auth_request 和 oauth2_proxy 设置标头

    我想使用授权请求 http nginx org en docs http ngx http auth request module html and oauth2 proxy https github com bitly oauth2 pr
  • DefaultHttpClient GET 和 POST 命令 Java Android

    好的 这是我的应用程序 一个 Android 应用程序 允许我从移动应用程序 而不是从网站 将 CokeZone 代码提交到 CokeZone co uk 所以我编写了这部分代码来执行登录后命令 然后检查我是否登录后 问题是 发送 post
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • GET 和 POST 方法的单独 Flask 路由

    在 Flask 中定义路由时 最好的做法是使用由多个 HTTP 方法定义的单个路由 并在该单个路由中使用显式逻辑处理不同的 HTTP 方法 例如 app route api users methods GET POST def users
  • 静态资源和非静态资源有什么区别?

    我主要是一名前端开发人员 设计师 但最近我一直在探索端到端解决方案 昨天 我使用平均堆栈完成了一个 TODO 应用程序 并想开始探索我的 VPS 的部署选项 话虽这么说 有人建议我使用 nginx 作为反向代理来提供静态资源 不幸的是 我陷
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 如何通过 HTTP POST 发送充满对象的 NSArray?

    我在 iPhone 端有一个产品 购物清单 由具有名称 product id 等的产品对象组成 我希望将此列表发送到服务器 在那里我将服务器上的列表与 iphone 中的列表进行比较 以合并所做的更改并将合并的列表发送回 iphone 如何
  • 在 Java Servlet 应用程序中设置 HTTP 201 响应的 Location 标头的正确方法是什么

    考虑以下代码向客户端发送 HTTP 201 已创建 响应 String url app things id 42 example response setStatus HttpServletResponse SC CREATED respo
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • .NET 中有什么方法可以以编程方式侦听 HTTP 流量吗?

    我正在使用浏览器自动化来测试网站 但我需要验证来自浏览器的 HTTP 请求 即图像 外部脚本 XmlHttpRequest 对象 有没有一种方法可以以编程方式实例化代理以供浏览器使用以查看其发送的内容 我已经在使用 Fiddler 来监视流
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 当 ssl 和 http2 打开时,Nginx 似乎忽略 server_name

    我有这个 nginx 配置 server listen 80 default server listen 80 default server server name www example com return 301 https www
  • 响应 301 永久移动

    我曾经得到以下对 php 请求的响应 回复
  • 使用 aws elastic beanstalk 将非 www 重定向到 www

    我正在使用 Elastic Beanstalk 并按照说明使用 Express Web 服务器部署我的应用程序 如下所示 http docs aws amazon com elasticbeanstalk latest dg create
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上

随机推荐

  • React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用

    我正在尝试编写一个错误处理程序 但收到此错误 React Hook useHttpErrorHandler 无法在回调内调用 React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用 我不知道我还能如何
  • 更新容器内的 WordPress。没有 FTP 访问权限

    我安装了一个 WordPress 网站wordpressDocker 镜像 然后安装我的主题 一切正常 但是当我稍后想要更新 Wordpress 时 我收到以下消息 要执行请求的操作 WordPress 需要访问您的 Web 服务器 请输入
  • 位置更新自动暂停 iOS

    我正在使用phonegap 构建一个iOS 应用程序 当应用程序在后台运行时 我试图让 iOS 将其当前位置更新到我的应用程序 我已经注册了位置更新后台模式 但它不可靠 经过一番研究 我认为 iOS 会自动暂停位置更新 CLLocation
  • 将 Proguard 用于 Scala AWS Lambda

    我有一个关于 proguard 与 scala aws lambda 函数一起使用的问题 我创建了一个非常简单的 aws lambda 函数 如下所示 package example import scala collection Java
  • Google 容器注册表权限

    我正在尝试将 docker 映像推送到 GCP 但仍然收到此错误 unauthorized You don t have the needed permissions to perform this operation and you ma
  • 访问 DataReader 中的特定行

    我有一个数据读取器 可以在 js 轮播中显示比赛周列表 我需要能够添加一个 if 语句来更改当前游戏周的 div 类 这是我当前的代码 if dReader HasRows while dReader Read gameweekList T
  • 当 cfhttp 上 throwonerror=true 时如何获取 cfhttp.filecontent ?

    我使用以下命令进行 REST 服务调用cfhttp与throwonerror属性设置为 true 当我使用 try catch 语句捕获错误时 我似乎找不到一种方法来输出 REST 服务调用尝试返回的错误 该错误将驻留在cfhttp fil
  • 如何从 C# 应用程序调用 docker run

    我有一个 WPF 应用程序 在处理文件时需要使用 docker 进程 docker 容器构建在盒子上 目前在使用 WPF 应用程序处理文件后 用户必须启动命令提示符并输入 docker run it rm v folderdedirect
  • 尝试一下,catch似乎不起作用

    我有以下代码 我认为它可以让我捕获错误 而不是生成错误 写出 发生错误 不幸的是 它仍然显示错误 无法重新启动计算机 访问被拒绝 我知道为什么会发生这种情况 但我希望能够捕获错误并重新格式化它 我究竟做错了什么 try Restart Co
  • 使用 Hibernate 和 JPA 映射 Map

    我尝试以下映射 ElementCollection private Map
  • 使用 iTextSharp 从现有 PDF 中读取 XMP

    如何使用 iTextSharp 从现有 PDF 文件中读取 XMP 我对 itextSharp 非常无知 但这对我来说很有效 PdfReader pdf new PdfReader fileName string metadataXml S
  • HTML + Javascript 渲染器输出 HTML 或纯文本?

    如果我使用 String plain Html fromHtml html toString 渲染简单的 html 其中包含 any plain vanila HTML goes here 一切都美好而花花公子 但是 如果该页面包含大量 J
  • Java 如何使 JFrame 作为最大化窗口启动

    我想知道如何使 java JFrame 最大化 我不希望它是全屏的 周围没有窗口 我只是希望它像普通程序 例如网络浏览器 一样启动 我已经知道如何使用 Dimension screenSize Toolkit getDefaultToolk
  • Safari - 当选项卡位于后台时,HTML5 音频不会播放

    我有一个反应应用程序 它使用反应声音 基本上是 HTML5 音频 在触发新通知时播放声音 我希望当选项卡在 Safari 中处于后台时播放此声音 但这似乎不起作用 当选项卡位于前台时 声音会播放 有谁知道这个问题的解决方法 None
  • Chrome 中的 .blur 和 .onblur

    更新了没用 http jsfiddle net xvepL 4 http jsfiddle net xvepL 4 让我有点抓狂 Chrome 不使用 blur 仅适用于 onblur 但其他浏览器使用 blur 有没有办法解决这个问题 这
  • 自动热键 3 次点击 = 音量静音

    在 autohotkey 中 我试图做到这一点 以便当我按下鼠标左键 3 次并延迟 10 毫秒它变成音量静音 LButton if Send Volume Mute else Send LButton Return Use A TickCo
  • Pytest 仅运行具有特定标记属性的测试

    我在用着 pytest mark为了唯一地标识特定的测试 因此我创建了自定义标记 pytest mark key 我这样使用它 pytest mark key test 001 def test simple self self passi
  • 在 PHP 中使用heredoc有什么好处? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery 如果单选按钮被选中

    可能的重复 检查特定单选按钮是否已选中 https stackoverflow com questions 2195125 check of specific radio button is checked 我目前有这 2 个单选按钮 以便
  • nginx 和带有代理传递的尾部斜杠

    我对 nginx 1 4 1 使用以下配置 server listen 8000 server name correct name gr location test register proxy set header X Forwarded