haproxy 中的 URL 重定向和 TCP 代理

haproxy 中的 URL 重定向和 TCP 代理

在只有一个 ipv4 并运行 haproxy 的服务器中,我想要重定向一个 url 并在 TCP 级别代理另一个 url,以实现 ssl 直通目的。

frontend https-frontend
  bind *:443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }
  use_backend proxy-backend if { req.ssl_sni -i proxied-url.com }
  redirect prefix https://url-rewrited.com code 301 if  { req.ssl_sni -i domain-for-redirect.com }

但是重定向前缀需要http模式,而代理直通需要tcp模式。

[WARNING] 347/153600 (1324) : config : 'redirect' rules ignored for frontend 'https-frontend' as they require HTTP mode.

如果我使用两个前端绑定在 443 上,则加载页面时会出现错误。

我该怎么办?

编辑

我尝试做一个 http 后端进行重定向

frontend https-frontend
  bind *:443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }
  use_backend proxy-backend if { req.ssl_sni -i proxied-url.com }
  use_backend redirect-backend if  { req.ssl_sni -i domain-for-redirect.com }

backend redirect-backend
  mode http
  option ssl-hello-chk
  redirect prefix https://url-rewrited.com code 301 if { req.ssl_sni -i domain-for-redirect.com }

但是当我访问 domain-for-redirect.com 时,出现 ERR_SSL_PROTOCOL_ERROR。如何在后端加载证书?

答案1

您需要添加具有有效或自签名 ssl 证书的 ssl 选项: 而不是:bind *:443 使用:bind *:443 ssl crt /etc/ssl/private/certFileName.pem

相关内容