要将同一 IP 上的多个子域重定向到不同的主机,我使用的是 haproxy(1.7.5,Debian stable),它工作正常。但是,我还想通过 IP 限制对某些主机的访问,并向被拒绝的主机显示一条干净的消息(正确的 403 错误页面),这就是我找不到解决方案的地方。
到目前为止,我最好的配置是使用“拒绝”后端的配置;但是我不知道如何配置这个以从浏览器端获取除了 SSL 错误之外的任何内容。
配置如下所示:
frontend http_redirect
bind *:80
redirect scheme https if !{ ssl_fc }
frontend tls_router
bind *:443
mode tcp
option tcplog
option tcpka
acl demo_acl req_ssl_sni -i demo.myhost.org
acl www_acl req_ssl_sni -i www.myhost.org
acl demo_network_allowed src 10.1.1.0/24
use_backend demo_tls if demo_acl
use_backend wwww_tls if www_acl
use_backend reject_access if demo_acl !demo_network_allowed
backend www_tls
mode tcp
option tcpka
server www_srv 192.168.1.2:443
backend demo_tls
mode tcp
option tcpka
server demo_srv 192.168.1.3:443
backend reject_access
mode http
# errorfile 403 /etc/haproxy/errors/403.http
# server demo 192.168.1.2:443
http-request set-path www.myhost.org/403.html
http-request redirect scheme https if ! { ssl_fc }
从“reject_access”后端可以清楚地看出,我尝试了几件事,结果相同:
$ LANG=C wget --no-check-certificate -S https://demo.myhost.org
--2019-07-01 18:48:31-- https://demo.host.org/
Résolution de demo.myhost.org? 10.12.24.1
Connexion à demo.myhost.org|10.12.24.1|:443? connecté.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Incapable d'établir une connexion SSL.
欢迎对此配置提供任何帮助。
您不能在 tcp 模式下更改 ssl 请求的 url。您必须在 haproxy 中终止 ssl
错误说它无法建立 ssl 连接。拒绝后端向 443 发出 http 请求
编辑,SSL 终止示例