HAProxy - 通过保持相同的 HTTP 方法 (POST) 将方案重定向到 HTTPS

HAProxy - 通过保持相同的 HTTP 方法 (POST) 将方案重定向到 HTTPS

我正在使用 HAProxy 1.6

我强制使用 https。因此,我在后端将 http 重定向到 https。为此,我使用以下代码:

backend my-app-name
    redirect scheme https if !{ ssl_fc }
    [...]

这工作得很好,但如果我的 http 请求使用 POST 方法完成,则重定向方案似乎会将方法更改为 GET。

我在HAProxy 文档关于 HTTP 重定向,我们可以将 HTTP 代码更改为 308。但我无法改变当前应用程序的行为。

如何使用 HAProxy 重定向到 https 并保留我原来的 HTTP 方法?

答案1

正如您所说的那样,您可以执行以下操作:

backend my-app-name
       redirect scheme https code 308 if !{ ssl_fc }

haproxy 将返回 308(而不是 302)。我不确定您的应用程序是如何参与的。如果它位于 haproxy 后面,它将永远不会注意到第一个非 https 请求。例如,任何浏览器都会通过 https 和相同的 HTTP 动词发出第二个请求,即保留 POST。

答案2

重定向

使用 http-request 重定向配置指令重新路由 HTTP 流量。这些指令将 HTTP 重定向响应发送回客户端,然后客户端对新资源发出新请求。执行重定向时,HAProxy Enterprise 直接响应客户端;它不会将任何流量转发到服务器。

您可以通过设置 code 参数来指定要返回的 HTTP 状态代码。使用以下任一方法:

代码含义


301    永久移动

302    临时移动不应被客户端缓存。如果未配置代码,则这是默认值

303    与 302 类似,但浏览器必须使用 GET 获取新位置

307    与 302 类似,但浏览器必须重用与原始请求相同的方法

308    与 301 类似,但浏览器必须重用与原始请求相同的方法

相关内容