为了将同一 IP 上的多个子域重定向到不同的主机,我使用了 haproxy(1.7.5,Debian 稳定版),效果很好。不过,我还想通过 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.
欢迎对此配置提供任何帮助。
答案1
您无法在 tcp 模式下更改 ssl 请求的 url。您必须在 haproxy 中终止 ssl
错误提示无法建立 SSL 连接。拒绝后端发出 443 的 http 请求
编辑,SSL 终止示例
frontend https443
bind *:443 ssl crt someWildacrd.pem
#http-request set-log-level silent
#SSL is terminated, we can see URL path
acl restricted_page path_beg,url_dec -i /admin
http-request deny if restricted_page
default_backend b_http