我正在使用 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 类似,但浏览器必须重用与原始请求相同的方法