我有一个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用户生成不同的页面(例如,不提供某些内容)