我们在单个 vultr 云实例上有许多应用程序,但对于单个带有 SSL 证书的 https loadBalancer,它只有一个默认健康检查。
所以我们使用 nginx 配置多个 /backend URL,指定 http 并使用 docker-compose 运行,以使应用程序在单个网络上运行。
server {
listen 80;
listen [::]:80;
server_name *.example.com;
access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://strapi-container:1337/;
}
location /chat {
proxy_pass http://rocketchat-container:3000;
}
location /auth {
proxy_pass http://keycloak-container:8080;
proxy_set_header Host $host;
}
}
}
后端url分别为http://instance-ip/、http://instance-ip/chat、http://instance-ip/auth
nginx:
image: nginx:1.20
container_name: nginx
ports:
- 80:80
restart: unless-stopped
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- strapi-cms
- rocketchat
- keycloak
networks:
- test-network
一切正常,我们可以使用上述后端 URL 通过 nginx 默认端口 80 访问应用程序。
但我们的目的是以某种方式将 nginx 与 vultr 中的 HTTPS LoadBalancer 连接起来,它应该像
例如:https://qa.example.com/、https://qa.example.com/chat、https://qa.example.com/auth
答案 0 :(得分:1)
您要做的是在 Vultr 负载均衡器上设置单个转发规则。
实例上 TLS 的转发规则 443->443
LB 上 TLS 的转发规则 443->80
。
这将使 LB 将定义的 LB 端口上的所有传入流量转发到您的 NGINX 定义的端口。然后您的 nginx 实例应该将该位置路由到您定义的相应 proxy_pass。
至于健康检查...Vultr 负载均衡器只有一个健康检查,因为它们被设计为与 LB 后面的单个应用程序一起工作。但是,您可以拥有一个 /health
端点,当点击该端点时,它会检查所有其他应用程序的状态,如果它们都在运行,则返回 200 ok
。
我们在 https://www.vultr.com/docs/vultr-load-balancers
提供了一些详细的文档完全披露我是 Vultr 负载均衡器的技术负责人。