我有 3 个 Spring Boot 应用程序,每个应用程序都在不同的端口上运行。有人可以指导我如何设置 Ha 代理来演示 3 个应用程序之间的负载平衡(可以创建多个实例)。 spring boot中有没有集成Ha Proxy的功能?我必须在 Ha Proxy 的配置文件中更改哪些内容?
最佳答案
实际上,有多种方法可以实现这一目标。但是,我认为 Spring Boot 中没有任何东西可以与 HAProxy 集成,因为它们两个是不同的进程,并且它们两个独立工作,并且彼此没有任何关联,因为您可能知道 Spring Boot 的作用。 HAProxy是一个负载均衡器,也是分布在多个服务器上的TCP和HTTP进程的代理服务器。
这解释了你问题的第一部分。
实际上,如何实现这一目标完全取决于您想要如何设置。
像您一样将各个应用程序作为服务运行,并根据 URL 将流量路由到每个应用程序。
另一种方法是在单个 tomcat 上部署各个应用程序,并借助应用程序属性中的上下文路径,您可以将流量从外部路由到 tomcat,而 tomcat 会处理所有事务。
可能还有其他方法可以做到这一点,有人可以在将来添加到这个答案中。但无论哪种方式,您都需要使用代理服务器来执行此操作,它可以是 HAProxy、Nginx 或任何适合目的的服务器。
因此,采用您的方法,我们假设您正在端口 8081、8082、8083 上运行应用程序。您的 HAProxy 设置应如下所示。
frontend www_http
mode http
bind *:80
bind *:443 ssl crt /etc/ssl/certs/mycompany.pem
# passing on that browser is using https
reqadd X-Forwarded-Proto:\ https
# for Clickjacking
rspadd X-Frame-Options:\ SAMEORIGIN
# prevent browser from using non-secure
rspadd Strict-Transport-Security:\ max-age=15768000
redirect scheme https code 301 if !{ ssl_fc }
stats enable
stats refresh 30s
stats show-node
stats realm Haproxy\ Statistics
stats uri /haproxy?stats
acl app1 hdr(host) -i app1.mycompany.com
acl app2 hdr(host) -i app2.mycompany.com
acl app3 hdr(host) -i app3.mycompany.com
# Just incase if you are using path instead of subdomain. But it's commented.
# acl app1 url_beg /app1
# acl app2 url_beg /app2
# acl app3 url_beg /app3
use_backend app_1_backend if app1
use_backend app_2_backend if app2
use_backend app_3_backend if app3
# backend for app 1
backend app_1_backend
timeout client 300000
timeout server 300000
redirect scheme https if !{ ssl_fc }
server app-1 127.0.0.1:8081 check
http-response set-header X-TS-Server-ID %s
# backend for app 2
backend app_2_backend
timeout client 300000
timeout server 300000
redirect scheme https if !{ ssl_fc }
server app-2 127.0.0.1:8082 check
http-response set-header X-TS-Server-ID %s
# backend for app 3
backend app_3_backend
timeout client 300000
timeout server 300000
redirect scheme https if !{ ssl_fc }
server app-3 127.0.0.1:8083 check
http-response set-header X-TS-Server-ID %s
这是一些基本设置,但您可以添加选项并根据需要更改所有内容。
希望这有帮助。
关于spring-boot - Haproxy 与 3 个 Spring Boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59708422/