포트 8080에서 Tomcat 서비스를 실행하는 이전 서버가 있습니다. 다양한 이유로(클라이언트 액세스 보호 포함) SSL 인증서로 보호되는 HAProxy 서버를 앞에 설정해야 합니다.
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은 myservice.example.org에 매핑된 새 서비스의 VIP입니다.
입장http://oldserver.example.org:8080평소처럼 잘 작동합니다.
질문: https://myservice.example.org"403 금지됨" 오류가 발생했습니다. Tomcat 로그에 추적이 없기 때문에 이 URL에 액세스해도 Tomcat 백엔드에 도달하지 않는 것으로 보입니다. (참고: HAProxy 구성이 여기에 있었지만 mode http
"503 서비스를 사용할 수 없음" 오류가 발생했습니다.)
답변1
SSL 인증서 확인을 비활성화하는 백엔드 옵션으로 인해 문제가 발생한 것으로 나타났습니다 ssl verify none
.
수정된 작업 구성은 다음과 같습니다.
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
backend bck_deny
mode http
http-request deny