我有一台旧服务器,它在端口 8080 上运行 Tomcat 服务。出于各种原因(包括保护来自客户端的访问),我不得不在它前面设置一个 HAProxy 服务器,并使用 SSL 证书进行保护。
这是 HAProxy 相关配置:
frontend myservice
mode tcp
option tcplog
option logasap
log global
option tcpka
bind 10.10.10.10:80
bind 10.10.10.10:443 ssl crt /etc/ssl/haproxy/myservice.example.org.pem
acl secure dst_port eq 443
http-response add-header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;"
http-response replace-header Set-Cookie (.*) \1;\ Secure if secure
use_backend bck_myservice if { hdr(Host) -i myservice.example.org myservice }
default_backend bck_deny
backend bck_myservice
mode tcp
balance leastconn
option prefer-last-server
server oldserver.example.org oldserver.example.org:8080 weight 1 check port 8080 inter 2000 rise 2 fall 5 ssl verify none
backend bck_deny
mode http
http-request deny
10.10.10.10 是新服务的 VIP,映射到 myservice.example.org。
访问http://oldserver.example.org:8080正常工作。
问题: https: //myservice.example.org导致错误“403 Forbidden”。访问该 URL 似乎不会访问 Tomcat 后端,因为在 Tomcat 日志中没有它的踪迹。(注意:HAProxy 配置曾经有mode http
,但它导致错误“503 服务不可用”。)
原来问题是由后端禁用 SSL 证书验证的选项引起的:
ssl verify none
。这是更正后的工作配置: