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

我有一个haproxy设置,有几个haproxy服务器路由到一个应用程序服务器集群。 我想haproxy做所有的SSL终止。

现在,https请求会以https的forms转发到应用程序服务器。 所以我想要的是:

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

我已经看到一些使用haproxy强制用户升级到https的configuration,然后整个系统都通过https。 这不是我正在寻找的 – 我希望应用程序服务器始终在http中。

我想我find了答案:

 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头。

然后创build两个前端,一个绑定到http,另一个绑定到https,这就是绑定线所做的。 在https前端,我们把ssl解密的参数。 之后,haproxy将通过http转发请求。

X-Forwarded-Proto头是这样的,你的应用服务器可以知道用户使用什么协议,以防止你想为非https用户生成不同的页面(例如,不提供某些内容)