使用 tcp 和 http2 模式维护 HAProxy

使用 tcp 和 http2 模式维护 HAProxy

我在使用 http2 以 TCP 模式配置 HAProxy 时遇到问题。

我的主要目标是通过 HTTPS 提供静态维护页面。

这是我的 HAProxy 配置:

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    tune.ssl.default-dh-param 2048
    ssl-default-bind-options no-sslv3 no-tls-tickets
    ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

defaults                                                                       
    log global                                                 
    option dontlognull
    timeout connect 5000                                                       
    timeout client  50000
    timeout server  50000                                                      

frontend http
    mode http
    bind *:80
    redirect scheme https

frontend https
    mode tcp
    bind *:443 ssl crt /etc/ssl/certificate.pem alpn h2,http/1.1

    default_backend web

backend web
    mode tcp
    balance roundrobin
    server www1 192.168.0.100:443 check
    server www2 192.168.0.101:443 check
    server www3 192.168.0.102:443 check

backend maintenance
    mode tcp
    errorfile 503 /etc/haproxy/errors/503.http

当我切换到前端时默认后端部分维护它不起作用 - HAProxy 没有提供任何页面。使用模式 http 的模拟解决方案工作正常。但是我无法在后端使用带有 http2 和 nginx 的 SSL。

后端有一个开启了 http2(不带 SSL)的 nginx。

我无法通过 nginx 进行维护,因为使用多个 Web 服务器是毫无意义的。未来我计划将 Web 服务器堆栈扩展到十几台服务器。

我曾考虑过放置一个简单的独立服务器来为一个静态维护页面提供服务,但我不知道有哪个应用程序/库允许在没有 SSL 的情况下使用 http2。我认为目前只有 nginx 允许这样做。

我把 HAProxy 的文档从头到尾都读了一遍,没有一个有用的示例描述 http2 和 SSL 配置。最后,连 Google 都束手无策。

答案1

也许你应该更换

default_backend

use_backend

以下是一个例子:来自 github

相关内容