前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何配置 GitLab 使用 HTTPS

如何配置 GitLab 使用 HTTPS

作者头像
soulteary
发布2019-09-29 13:30:01
2K0
发布2019-09-29 13:30:01
举报

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2019年08月18日 统计字数: 3653字 阅读时间: 8分钟阅读 本文链接: https://soulteary.com/2019/08/18/how-to-configure-gitlab-to-use-https.html


如何配置 GitLab 使用 HTTPS

本文将聊聊如何在三种场景下,如何正确配置 GitLab ,为用户提供 HTTPS 服务。

为了行文的简单,这里一律使用容器进行搭建配置,如果你是源码、软件包部署,修改对应的文件配置即可。

直接使用 GitLab 处理 HTTPS

如果你既不需要统一管理 SSL 证书,又不需要强制流量只从一个网关入口进来,那么直接使用 GitLab 来处理 HTTPS 请求,或许是最好的方案。

这个方案只需要将证书部署到 GitLab 服务器上,然后稍加修改配置即可。

如果使用 compose 配置来描述的话,删除掉所有不相关的配置后,涉及到处理 HTTPS 的配置如下(完整配置见历史文章、更多相关内容可以浏览 GitLab 标签):

代码语言:javascript
复制
version: '3'services:  gitlab:    image: 'gitlab/gitlab-ce:12.0.2-ce.0'    hostname: 'gitlab.lab.com'    ports:      - "80:80"      - "443:443"    volumes:      - './cert/lab.com.crt:/etc/gitlab/ssl/lab.com.crt:ro'      - './cert/lab.com.key:/etc/gitlab/ssl/lab.com.key:ro'    environment:      GITLAB_OMNIBUS_CONFIG: |        external_url 'https://gitlab.lab.com'        nginx['enable'] = true        nginx['client_max_body_size'] = '250m'        nginx['redirect_http_to_https'] = true        nginx['redirect_http_to_https_port'] = 80        nginx['ssl_certificate'] = "/etc/gitlab/ssl/lab.com.crt"        nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/lab.com.key"        nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"        nginx['ssl_prefer_server_ciphers'] = "on"        nginx['ssl_protocols'] = "TLSv1.2"        nginx['http2_enabled'] = true        nginx['proxy_set_headers'] = {          "X-Forwarded-Proto" => "http"        }

因为使用 GitLab 处理 HTTP/HTTPS 流量,所以需要开放 80443 端口。

正确配置端口之后,最关键的配置是 external_url

配置内容中需要包含 https 协议头,另外在 nginx['ssl_certificate']nginx['ssl_certificate_key'] 配置项中,需要填写正确的证书路径。

使用其他软件来处理 HTTPS

这里主要有两种场景,第一种是使用 Traefik 之类的代理软件,另一种则是使用 云主机的 SLB 服务。

不论是出于想统一管理证书,还是减少暴露在外的公开端口,流量经过统一入口转发到具体应用之上,都可以使用下面的方案来进行操作。

先聊聊使用 Traefik 作为网关的场景。

使用 Traefik 作为网关

traefik.toml 配置文件中涉及 HTTP 流量处理的配置主要是这部分内容:

代码语言:javascript
复制
defaultEntryPoints = ["http", "https"][entryPoints]    [entryPoints.http]        address = ":80"        compress = true        [entryPoints.http.redirect]            entryPoint = "https"    [entryPoints.https]        address = ":443"        compress = true    [entryPoints.https.tls]        [[entryPoints.https.tls.certificates]]            certFile = "/data/ssl/lab.com.pem"            keyFile = "/data/ssl/lab.com.key"

和上一小节一样,删除掉所有不相关的配置后,核心配置如下:

代码语言:javascript
复制
version: '3'services:  gitlab:    image: gitlab/gitlab-ce:12.1.6-ce.0    hostname: 'gitlab.lab.com'    expose:      - 80    labels:      - "traefik.enable=true"      - "traefik.gitlab.port=80"      - "traefik.gitlab.frontend.rule=Host:gitlab.lab.com"      - "traefik.gitlab.frontend.entryPoints=http,https"      - "traefik.gitlab.frontend.headers.SSLProxyHeaders=X-Forwarded-For:https"      - "traefik.gitlab.frontend.headers.STSSeconds=315360000"      - "traefik.gitlab.frontend.headers.browserXSSFilter=true"      - "traefik.gitlab.frontend.headers.contentTypeNosniff=true"      - "traefik.gitlab.frontend.headers.customrequestheaders=X-Forwarded-Ssl:on"      - "traefik.gitlab.frontend.passHostHeader=true"      - "traefik.gitlab.frontend.passTLSCert=false"    networks:      - traefik    environment:      GITLAB_OMNIBUS_CONFIG: |        external_url 'https://gitlab.lab.com'        nginx['enable'] = true        nginx['listen_port'] = 80        nginx['listen_https'] = false        nginx['http2_enabled'] = false        nginx['redirect_http_to_https'] = truenetworks:  traefik:    external: true

因为使用 Traefik 处理 HTTP/HTTPS 流量,所以 GitLab 只需要开放 80 端口即可,但是需要在 label 中定义服务发现的各种规则。

同样的,这里的核心配置是 external_urlnginx['listen_https'],前者依旧要保持有 https 协议,但是后续则需要配置为 false

使用 SLB 作为网关

如果要使用云服务商的 SLB 来管理 HTTPS 流量和证书,那么上面的配置可以再简化一些:

代码语言:javascript
复制
version: '3'services:  gitlab:    image: gitlab/gitlab-ce:12.1.6-ce.0    hostname: 'gitlab.lab.com'    ports:      - 80:80    environment:      GITLAB_OMNIBUS_CONFIG: |        external_url 'https://gitlab.lab.com'        nginx['enable'] = true        nginx['listen_port'] = 80        nginx['listen_https'] = false        nginx['proxy_set_headers'] = {          "Host" => "$$http_host",          "X-Real-IP" => "$$remote_addr",          "X-Forwarded-For" => "$$proxy_add_x_forwarded_for",          "X-Forwarded-Proto" => "http"        }networks:  traefik:    external: true

在删除所有 labels 内容后,GitLab 还不能够正常运行,我们必须再设置 nginx['proxy_set_headers'] ,配置 "X-Forwarded-Proto"=>"http" ,让 GitLab 接受流量的时候,返回给代理软件正确的响应。

最后

这次就先折腾到这里,等项目上线后,再聊聊如何更高效的使用 GitLab

—EOF

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 折腾技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何配置 GitLab 使用 HTTPS
    • 直接使用 GitLab 处理 HTTPS
      • 使用其他软件来处理 HTTPS
        • 使用 Traefik 作为网关
        • 使用 SLB 作为网关
      • 最后
      相关产品与服务
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档