Networking

haproxy 同一埠上的兩個應用程序具有不同的證書

  • July 13, 2021

我正在設置 haproxy。我的配置是:

frontend bothApps
       bind *:9999
       mode http
       acl prov path_end -i /prov-0.0.1-SNAPSHOT/
       acl web path end -i /web-0.0.1-SNAPSHOT/
       acl prov1 path_end -i /prov-0.0.1-SNAPSHOT/testAuthenticated.html
       acl web1 path_end -i /web-0.0.1-SNAPSHOT/testAuthenticated.html
       use_backend focus if prov
       use_backend focus if prov1
       use_backend cnt if web
       use_backend cnt if web1

並且在沒有 https 的情況下也可以正常工作。現在我想添加 https,但是兩個應用程序都應該在埠8443(https://localhost:8443/prov-0.0.1-SNAPSHOThttps://localhost:8443/web-0.0.1-SNAPSHOT) 上呼叫 haproxy,但使​​用不同的證書 - prov( haproxyPROV.pem)、web( haproxyWEB.pem)。我該如何配置它?

我試過:

frontend https
       bind *:8443 ssl crt /etc/haproxy/haproxyWEB.pem
       mode http

但在這裡我每個埠只能有一個證書

您可以在一個埠上使用多次證書:

frontend foo
   bind *:8443 ssl crt /path/to/cert1.pem crt /path/to/cert2.pem

Haproxy 使用 TLS SNI 將證書與連接匹配(如果 SNI 不存在或發現不匹配,則bind使用第一個線上證書(上例中的 cert1.pem))。因此,為了實現您的目標,您必須將兩個不同的域名指向此主機:埠。喜歡web.example.comprov.example.com指向同一個主機。我猜這就是所有這些評論的內容。

旁注,您path_end在 ACL 中使用,例如acl prov path_end -i /prov-0.0.1-SNAPSHOT/,但這也將匹配/foobar/prov-0.0.1-SNAPSHOT/and /web-0.0.1-SNAPSHOT/prov-0.0.1-SNAPSHOT/,這可能是您想要的,也可能不是。通常pathpath_beg更合適。

引用自:https://serverfault.com/questions/1069439