我们在单个vultr云实例上有许多应用程序,但对于具有SSL证书的单个https loadBalancer,它只有一个默认的健康检查。
因此,我们使用nginx配置了指定http的mutliple/backendURL,并使用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
一切都很好,我们可以通过nginx默认端口80使用上述后端URL访问应用程序。
但我们的意图是以某种方式将nginx与vultr中的HTTPS LoadBalancer连接起来,它应该像一样工作
例如:https://qa.example.com/,https://qa.example.com/chat,https://qa.example.com/auth
您要做的是在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负载平衡器的技术负责人。