GitLab + GitLab Pages + CDN 反向代理部署说明

本文记录通过 1Panel 部署 GitLab,并结合 CDN + 反向代理 实现:

  • GitLab 主站 HTTPS 访问
  • GitLab Pages 子域名访问
  • CDN 统一 HTTPS 入口
  • GitLab 容器内部仅提供 HTTP 服务
  • 避免 CDN 直接回源 HTTP 带来的安全和兼容问题

整体架构如下:

用户
 |
HTTPS
 |
CDN
 |
HTTPS回源
 |
本地Nginx / 反向代理
 |
HTTP
 |
GitLab容器

第一步:安装 GitLab

1. 在 1Panel 商店安装 GitLab

进入 1Panel 应用商店,搜索并安装 GitLab。

26/07/31/22/typora-user-images/image-20260731223232110


2. 配置 GitLab Pages 额外端口

安装完成后,需要额外开放一个端口用于 GitLab Pages 服务。

26/07/31/22/typora-user-images/image-20260731223416972

例如:

8881 -> GitLab Pages HTTP服务

后续 CDN 或反向代理会通过该端口访问 Pages。


3. 修改 GitLab 配置文件

进入 GitLab 容器,修改:

/etc/gitlab/gitlab.rb

配置如下:

26/07/31/22/typora-user-images/image-20260731223602538

#########################
# GitLab External URL
#########################

# 用户访问GitLab时使用CDN提供的HTTPS地址
# 外部访问默认使用443,因此这里无需填写端口
external_url 'https://gitlab.***.com'

# 不使用GitLab自带Let's Encrypt
# HTTPS证书由CDN/反向代理负责
letsencrypt['enable'] = false


#########################
# GitLab Behind Reverse Proxy
#########################

# GitLab容器内部只监听HTTP
# HTTPS由外层代理处理
nginx['listen_port'] = 80
nginx['listen_https'] = false


# 告诉GitLab外部访问协议为HTTPS
gitlab_rails['gitlab_https'] = true
gitlab_rails['gitlab_port'] = 443
gitlab_rails['gitlab_host'] = 'gitlab.***.com'


# 信任反向代理传递的请求头
# CDN和本地Nginx都会添加X-Forwarded-*信息
gitlab_rails['trusted_proxies'] = ['0.0.0.0/0']


#########################
# SSH Clone
#########################

# SSH不经过CDN
# 需要路由器单独转发端口到GitLab容器

gitlab_rails['gitlab_ssh_host'] = 'gitlab.***.com'
gitlab_rails['gitlab_shell_ssh_port'] = 8822


#########################
# GitLab Pages
#########################

# Pages访问域名
pages_external_url "https://pages.***.com"


# 开启GitLab Pages
gitlab_pages['enable'] = true

# 开启隔离模式
gitlab_pages['inplace_chroot'] = true


# Pages内部只提供HTTP服务
# HTTPS由外部CDN/反向代理处理

gitlab_pages['external_http'] = ['0.0.0.0:8881']
gitlab_pages['external_https'] = []


# 禁用GitLab Pages自带Nginx
# 避免重复处理HTTPS证书

pages_nginx['enable'] = false

修改完成后执行:

gitlab-ctl reconfigure

然后重启 GitLab 容器即可。


第二步:配置 CDN

1. 配置域名解析

在 CDN 控制台添加域名解析记录。

26/07/31/22/typora-user-images/image-20260731223812462

主要关注:

  • GitLab 主域名:
gitlab.***.com
  • Pages 域名:
pages.***.com

其中图中的第 1、3 条记录是核心配置。

第 2 条记录是否需要,需要根据实际 CDN 配置验证。


2. 配置回源地址

配置 CDN 回源到本地服务器。

26/07/31/22/typora-user-images/image-20260731223957367

26/07/31/22/typora-user-images/image-20260731224023389

回源配置说明:

GitLab:

https://gitlab.***.com
        |
        ↓
CDN
        |
        ↓
服务器443端口
        |
        ↓
反向代理
        |
        ↓
GitLab容器80端口

Pages:

https://pages.***.com
        |
        ↓
CDN
        |
        ↓
服务器8881端口
        |
        ↓
GitLab Pages HTTP服务

3. 配置边缘证书(可选)

如果希望 CDN 节点直接通过 HTTPS 访问,需要配置边缘证书。

26/07/31/22/typora-user-images/image-20260731224306503

配置完成后:

  • 用户 → CDN:HTTPS
  • CDN → 源站:HTTPS

避免 CDN 使用 HTTP 明文回源。


最终效果

完成配置后:

GitLab访问

访问:

https://gitlab.***.com

即可进入 GitLab 主站。

GitLab Pages访问

部署 Pages 后:

https://xxx.pages.***.com

即可访问对应项目的 Pages 站点。

SSH访问

Git SSH:

ssh://git@gitlab.***.com:8822

SSH端口独立转发,不经过CDN。


总结

该方案的核心思路:

  1. GitLab容器内部只负责HTTP服务;
  2. HTTPS统一交给CDN和反向代理处理;
  3. GitLab通过 X-Forwarded-* 获取真实访问协议;
  4. GitLab Pages使用独立端口,通过CDN暴露HTTPS;
  5. 避免CDN直接HTTP回源,提高安全性和兼容性。

最终实现:

  • GitLab主站 HTTPS访问 ✅
  • GitLab Pages通配符域名访问 ✅
  • CDN统一HTTPS入口 ✅
  • 源站无需维护多套证书 ✅
最后修改:2026 年 07 月 31 日
反正没人给,你也爱给不给吧。