AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 988049
Accepted
olivierg
olivierg
Asked: 2019-10-16 02:06:38 +0800 CST2019-10-16 02:06:38 +0800 CST 2019-10-16 02:06:38 +0800 CST

HAProxy 作为 TCP 负载平衡器(SSL 直通)不起作用?

  • 772

我在将 HAProxy 设置为 TCP 负载平衡器(第 4 层)时遇到了一些问题,我想听听您的建议。

我一直在关注网络上的许多指南,我想出了这个配置(在日志中没有显示任何错误,它开始很好):

注意:真实域名被屏蔽

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
 daemon
 user                haproxy
 group               haproxy
 log                 /dev/log local6 debug
 maxconn             50000
 chroot              /var/lib/haproxy
 pidfile             /var/run/haproxy.pid

#---------------------------------------------------------------------
# common defaults 
#---------------------------------------------------------------------
defaults
 mode                 tcp
 log                  global
 option               dontlognull
 timeout connect      5000
 timeout client       50000
 timeout server       50000

#---------------------------------------------------------------------
# dedicated stats page
#---------------------------------------------------------------------
listen stats
 mode http
 bind :22222
 stats enable
 stats uri            /haproxy?stats
 stats realm          Haproxy\ Statistics
 stats auth           xxxxxx:xxxxxxxx
 stats refresh        30s

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main_https_listen
 bind *:443
 mode                tcp
 option              tcplog

# -------------------------------
# ACLs - SIT
# -------------------------------

acl acl_SIT_CI5      req.ssl_sni -i url1.domain.net
acl acl_SIT_HR8      req.ssl_sni -i url2.domain.net

# -------------------------------
# Conditions - SIT
# -------------------------------

use_backend backend_SIT_CI5 if acl_SIT_CI5
use_backend backend_SIT_HR8 if acl_SIT_HR8

#---------------------------------------------------------------------
# Backends
#---------------------------------------------------------------------

backend backend_SIT_CI5
 mode tcp
 balance source
 option ssl-hello-chk
 server server_SIT_CI5_1 host1.domain.net:443 check
 server server_SIT_CI5_2 host2.domain.net:443 check

backend backend_SIT_HR8
 mode tcp
 balance source
 option ssl-hello-chk
 server server_SIT_HR8_1 host1.domain.net:443 check
 server server_SIT_HR8_2 host2.domain.net:443 check

我已将 host1.domain.net 指向我的 haproxy vIP(它后面有一个带有虚拟 IP 的 keepalived 配置)。

现在当访问https://url1.domain.net(甚至是https://loadbalancerURL但我认为这是正常的)我有一个错误这个页面无法显示。在高级设置中打开 TLS 1.0、TLS 1.1 和 TLS 1.2 并尝试再次连接到https://host1.domain.net。

单个 openssl s_client会导致 ssl 握手失败(无证书 blabla)。

你知道我做错了什么吗?另外,我在收听 443 时是否需要设置一些证书?(即使我不希望这些证书被解密或者我只希望我的 HAProxy 充当代理)。

我也尝试激活调试模式进行日志记录,但它没有显示任何错误(也没有新日志)

注意:后端位于防火墙后面,后端与 HAProxy 之间的通信未在 443 上打开(仅从 Haproxy 到后端),是否需要定向?为什么?

注意2:在haproxy stats中,我可以看到所有后端UP

另外,有没有办法知道/检查基于主机名(SNI)的重定向是否工作正常?(我的印象是连接停留在负载均衡器上并且没有重定向到后端,这就是我出错的原因)

haproxy -vv给出:

HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <[email protected]>

Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing -DTCP_USER_TIMEOUT=18
  OPTIONS = USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 USE_ZLIB=1 USE_REGPARM=1     USE_OPENSSL=1 USE_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.7
Compression algorithms supported : identity, deflate, gzip
Built with OpenSSL version : OpenSSL 1.0.2k-fips  26 Jan 2017
Running on OpenSSL version : OpenSSL 1.0.2k-fips  26 Jan 2017
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.32 2012-11-30
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT     IP_FREEBIND

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.
ssl
  • 2 2 个回答
  • 9630 Views

2 个回答

  • Voted
  1. Best Answer
    olivierg
    2019-10-16T07:26:37+08:002019-10-16T07:26:37+08:00

    ew,我通过在前端添加它来使它工作(在看了这篇文章之后:)

    tcp-request inspect-delay 5s
    tcp-request content accept if { req_ssl_hello_type 1 }
    

    问题是,我不知道这些选项在做什么......或者为什么我需要指定它们。这是否意味着 HAProxy 默认行为是拒绝任何东西?

    • 0
  2. Malcolm turnbull
    2022-04-03T23:11:08+08:002022-04-03T23:11:08+08:00

    您添加的两行确保 HAProxy 在选择后端之前有足够的时间读取 SNI 标头,并检查它实际上是 SSL 流量(否则拒绝它)。

    您可能还想选择一个默认后端:

    default_backend backend_SIT_CI5
    

    对于不匹配的 SNI。

    • 0

相关问题

  • 如何使用 Tomcat 5.5 更新 SSL 证书

  • 为 IIS6 自行生成 SSL 证书?

  • plesk 上的域和子域 ssl 访问

  • 如何设置 SSL 邮件服务器?

  • 如何通过 SVN 命令行接受 SSL 证书?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve