# Load Balancer for multi-node GitLab

> 原文：[https://docs.gitlab.com/ee/administration/high_availability/load_balancer.html](https://docs.gitlab.com/ee/administration/high_availability/load_balancer.html)

*   [SSL](#ssl)
    *   [Application nodes terminate SSL](#application-nodes-terminate-ssl)
    *   [Load Balancer(s) terminate SSL without backend SSL](#load-balancers-terminate-ssl-without-backend-ssl)
    *   [Load Balancer(s) terminate SSL with backend SSL](#load-balancers-terminate-ssl-with-backend-ssl)
*   [Ports](#ports)
    *   [Basic ports](#basic-ports)
    *   [GitLab Pages Ports](#gitlab-pages-ports)
    *   [Alternate SSH Port](#alternate-ssh-port)
*   [Readiness check](#readiness-check)

# Load Balancer for multi-node GitLab[](#load-balancer-for-multi-node-gitlab "Permalink")

在多节点 GitLab 配置中，您将需要一个负载平衡器才能将流量路由到应用程序服务器. 有关使用负载均衡器或进行确切配置的细节超出了 GitLab 文档的范围. 我们希望，如果您要管理像 GitLab 这样的 HA 系统，那么已经选择了负载均衡器. 一些示例包括 HAProxy（开源），F5 Big-IP LTM 和 Citrix Net Scaler. 本文档将概述需要在 GitLab 上使用哪些端口和协议.

## SSL[](#ssl "Permalink")

您将如何在多节点环境中处理 SSL？ 有几种不同的选择：

*   每个应用程序节点终止 SSL
*   负载平衡器终止 SSL，并且负载平衡器与应用程序节点之间的通信不安全
*   负载平衡器终止 SSL，并且负载平衡器与应用程序节点之间的通信是*安全*的

### Application nodes terminate SSL[](#application-nodes-terminate-ssl "Permalink")

将您的负载均衡器配置为以" TCP"而不是" HTTP（S）"协议的形式在端口 443 上传递连接. 这会将连接保持不变地传递到应用程序节点 NGINX 服务. NGINX 将具有 SSL 证书并在端口 443 上侦听.

有关管理 SSL 证书和配置 NGINX 的详细信息，请参见[NGINX HTTPS 文档](https://docs.gitlab.com/omnibus/settings/nginx.html) .

### Load Balancer(s) terminate SSL without backend SSL[](#load-balancers-terminate-ssl-without-backend-ssl "Permalink")

将您的负载均衡器配置为使用" HTTP（S）"协议而不是" TCP". 然后，负载均衡器将负责管理 SSL 证书和终止 SSL.

由于负载均衡器和 GitLab 之间的通信将不安全，因此需要一些其他配置. 有关详细信息，请参见[NGINX 代理的 SSL 文档](https://docs.gitlab.com/omnibus/settings/nginx.html) .

### Load Balancer(s) terminate SSL with backend SSL[](#load-balancers-terminate-ssl-with-backend-ssl "Permalink")

将您的负载均衡器配置为使用" HTTP（S）"协议而不是" TCP". 负载平衡器将负责管理最终用户将看到的 SSL 证书.

在这种情况下，负载均衡器和 NGINX 之间的流量也将是安全的. 无需为代理 SSL 添加配置，因为连接将一直保持安全. 但是，需要将配置添加到 GitLab 来配置 SSL 证书. 有关管理 SSL 证书和配置 NGINX 的详细信息，请参见[NGINX HTTPS 文档](https://docs.gitlab.com/omnibus/settings/nginx.html) .

## Ports[](#ports "Permalink")

### Basic ports[](#basic-ports "Permalink")

| LB 端口 | 后端端口 | Protocol |
| --- | --- | --- |
| 80 | 80 | HTTP（ *1* ） |
| 443 | 443 | TCP 或 HTTPS（ *1* ）（ *2* ） |
| 22 | 22 | TCP |

*   （ *1* ）： [Web 终端](../../ci/environments/index.html#web-terminals)支持要求您的负载平衡器正确处理 WebSocket 连接. 当使用 HTTP 或 HTTPS 代理，这意味着负载平衡器必须被配置为通过`Connection`和`Upgrade`逐跳头. 有关更多详细信息，请参见[Web 终端](../integration/terminal.html)集成指南.
*   （ *2* ）：当对端口 443 使用 HTTPS 协议时，需要向负载均衡器添加 SSL 证书. 如果您想在 GitLab 应用程序服务器上终止 SSL，请使用 TCP 协议.

### GitLab Pages Ports[](#gitlab-pages-ports "Permalink")

如果您使用具有自定义域支持的 GitLab 页面，则将需要一些其他端口配置. GitLab 页面需要一个单独的虚拟 IP 地址. 配置 DNS，将`pages_external_url`的`/etc/gitlab/gitlab.rb`指向新的虚拟 IP 地址. 有关更多信息，请参见[GitLab 页面文档](../pages/index.html) .

| LB 端口 | 后端端口 | Protocol |
| --- | --- | --- |
| 80 | 变化（ *1* ） | HTTP |
| 443 | 变化（ *1* ） | TCP（ *2* ） |

*   （ *1* ）：GitLab 页面的后端端口取决于`gitlab_pages['external_http']`和`gitlab_pages['external_https']`设置. 有关更多详细信息，请参见[GitLab Pages 文档](../pages/index.html) .
*   （ *2* ）：GitLab 页面的端口 443 应该始终使用 TCP 协议. 用户可以使用自定义 SSL 配置自定义域，如果 SSL 在负载均衡器处终止，则不可能.

### Alternate SSH Port[](#alternate-ssh-port "Permalink")

某些组织有禁止打开 SSH 端口 22 的策略.在这种情况下，配置允许用户在端口 443 上使用 SSH 的备用 SSH 主机名可能会有所帮助.与其他 GitLab 相比，备用 SSH 主机名将需要一个新的虚拟 IP 地址.上面的 HTTP 配置.

为备用 SSH 主机名（例如`altssh.gitlab.example.com`配置 DNS.

| LB 端口 | 后端端口 | Protocol |
| --- | --- | --- |
| 443 | 22 | TCP |

## Readiness check[](#readiness-check "Permalink")

强烈建议多节点部署将负载平衡器配置为利用[就绪检查，](../../user/admin_area/monitoring/health_check.html#readiness)以确保在将流量路由到节点之前准备好接受流量. 在使用 Puma 时，这一点尤其重要，因为在重新启动过程中会有短暂的一段时间，Puma 将不接受请求.

* * *

阅读更多有关高可用性配置的信息：

1.  [Configure the database](../postgresql/replication_and_failover.html)
2.  [Configure Redis](redis.html)
3.  [Configure NFS](nfs.html)
4.  [Configure the GitLab application servers](gitlab.html)