如何使用Haproxy通过http转发https请求

如何使用Haproxy通过http转发https请求

我有一个 haproxy 设置,其中有几个 haproxy 服务器路由到应用程序服务器集群。我希望 haproxy 执行所有 ssl 终止。

目前 https 请求以 https 形式转发到应用服务器。因此我想要的是:

user <-https-> Haproxy <-http-> Application
user <-http->  Haproxy <-http-> Application

我见过一些配置,它们都是使用 haproxy 强制用户将方案升级到 https,然后整个系统都通过 https。这不是我想要的 - 我想让应用服务器始终处于 http 状态。

答案1

我想我找到了答案:

defaults
        option  forwardfor
        option  http-server-close


frontend www-http
        bind :80
        reqadd X-Forwarded-Proto:\ http
        default_backend my-backend

frontend www-https
        bind :443 ssl crt /etc/haproxy/ssl/oroboro.com.pem
        reqadd X-Forwarded-Proto:\ https
        default_backend my-backend

在默认值中添加这两个选项。forwardfor 添加 X-Forwarded-For 标头。

然后创建两个前端,一个绑定到 http,另一个绑定到 https,这就是绑定行的作用。在 https 前端,我们放置了 SSL 解密的参数。之后,haproxy 将通过 http 转发请求。

X-Forwarded-Proto 标头的作用是你的应用服务器可以知道用户正在使用什么协议,以防你想为非 https 用户生成不同的页面(例如不呈现某些内容)

相关内容