使用tcp和http2模式进行HAProxy维护

我有一个问题configurationHAProxy TCP模式与http2。

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

这是我的HAProxyconfiguration:

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 

当我切换到前端部分default_backend 维护它不工作 – HAProxy不提供任何页面。 模式http的模拟解决scheme工作正常。 但是后来我无法在http2和nginx上使用SSL。

在后端有一个nginx的http2(没有SSL)打开。

我无法从nginx提供维护服务,因为使用多个Web服务器是无稽之谈。 将来我打算将Web服务器堆栈扩展到十几台服务器。

我正在考虑把一个简单的独立服务器提供一个静态维护页面,但我不知道任何应用程序/ lib将允许使用http2没有SSL。 我认为现在只有nginx允许。

我已经阅读了封面的HAProxy文档,并没有任何有用的例子描述http2和SSLconfiguration。 最后,甚至谷歌都是无奈的。

也许你应该更换

default_backend

use_backend

这是一个例子: 从github