2

我们在单个 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/chathttps://qa.example.com/auth

4

1 回答 1

1

您要做的是在 Vultr 负载均衡器上设置一个转发规则。

443->443实例上 TLS 的转发规则

443->80LB 上的 TLS转发规则。

这将使 LB 将定义的 LB 端口上的所有传入流量转发到 NGINX 定义的端口。然后,您的 nginx 实例应该将该位置路由到您定义的相应 proxy_pass。

至于健康检查……Vultr 负载均衡器只有一个健康检查,因为它们被设计为与 LB 后面的单个应用程序一起工作。但是,您可以有一个/health端点,当命中时会检查所有其他应用程序的状态,200 ok如果它们都在运行,则返回。

我们在https://www.vultr.com/docs/vultr-load-balancers提供了一些详细的文档

全面披露我是 Vultr 负载均衡器的技术主管。

于 2021-06-03T14:49:59.280 回答