如何通过 HTTPS 使用 HAProxy 进行服务器修复

如何通过 HTTPS 使用 HAProxy 进行服务器修复

我之前在 HAProxy 中为 Web 服务器创建了一个负载均衡器,但是那是 HTTP 而不是 HTTPS。

这是我以前使用的配置。

listen appname 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:XXXXXXXX
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie SRVNAME insert
    server lamp1 10.128.24.97:80 cookie S1 check
    server lamp2 10.128.24.98:80 cookie S2 check

我不知道如何重写此配置以使对端口 443 的请求可用于 HAProxy 后面的服务器。我复制了前一个并将端口更改为 443。但是我收到很多错误。我如何将配置转换为对 HTTPS/SSL 连接有效?

listen httpsapp 0.0.0.0:443
    mode tcp
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:XXXXXXXXXXX
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie SRVNAME insert
    server lamp1 10.128.24.97:443 cookie S1 check
    server lamp2 10.128.24.98:443 cookie S2 check

重新启动 HAProxy 时收到警告

[WARNING] 007/090716 (2409) : config : cookie will be ignored for proxy 'httpsapp' (needs 'mode http').
[WARNING] 007/090716 (2409) : config : 'option httplog' not usable with proxy 'httpsapp' (needs 'mode http'). Falling back to 'option tcplog'.
[WARNING] 007/090716 (2409) : config : 'stats' statement ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : 'option forwardfor' ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : 'option http-server-close' ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : proxy 'httpsapp' : ignoring cookie for server 'lamp1' as HTTP mode is disabled.
[WARNING] 007/090716 (2409) : config : proxy 'httpsapp' : ignoring cookie for server 'lamp2' as HTTP mode is disabled.

答案1

当您创建 HTTPS 代理时(取决于您使用的 HAProxy 版本,以及它是否编译了 SSL 支持),您有两种不同的方式来处理流量。

一个是您使用此配置所采用的路线 - 使其成为直接 TCP 代理,并将流量直接传递到后端服务器而不进行任何 Layer7 处理。

mode tcp

当处于 tcp 模式时,您将无法使用任何专门用于 http 代理的选项 - 在您的情况下,您将丢失统计端点、cookie 处理、“X-Forwarded-For”标头的插入等。发出警告只是为了让您知道该代理仍将运行,但它可能不会按您期望的方式运行,因为您使用仅特定于 http 代理的选项。

您可以采取的另一种方法是终止 HAProxy 服务器上的 SSL。在这种情况下,您的客户端和 HAProxy 之间有 HTTPS 流量,而 HAProxy 和您的后端服务器之间(通常)有未加密的 HTTP 流量。如果您要在 HAProxy 本身中执行 SSL 终止,而不是使用类似 pound 的东西,那么您需要运行编译了 SSL 支持的 v1.5。您得到的代理配置可能如下所示。

listen appname
  bind 0.0.0.0:80
  bind 0.0.0.0:443 ssl crt /path/to/your/cert.pem ciphers TLSv1+HIGH:!SSLv2:RC4+MEDIUM:!aNULL:!eNULL:!3DES:@STRENGTH
  mode http
  stats enable
  stats uri /haproxy?stats
  stats realm Strictly\ Private
  stats auth admin:XXXXXXXX
  balance roundrobin
  option http-server-close
  timeout http-keep-alive 3000
  option forwardfor
  cookie SRVNAME insert
  server lamp1 10.128.24.97:80 cookie S1 check
  server lamp2 10.128.24.98:80 cookie S2 check

关于这一点,有几点需要注意。这个 listen 指令实际上是将 HTTP 和 HTTPS 代理合并到同一个代理中。它也可以很容易地被拆分,但除非是必需的,否则我喜欢像这样让事情变得更干净一些。此外,“密码”选项可以根据您的喜好或应用程序进行配置——我不是 SSL 专家,但这些选项对我来说很有用,所以我想我会把它们包括在内。

相关内容