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。

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

例如:
8881 -> GitLab Pages HTTP服务后续 CDN 或反向代理会通过该端口访问 Pages。
3. 修改 GitLab 配置文件
进入 GitLab 容器,修改:
/etc/gitlab/gitlab.rb配置如下:

#########################
# 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 控制台添加域名解析记录。

主要关注:
- GitLab 主域名:
gitlab.***.com- Pages 域名:
pages.***.com其中图中的第 1、3 条记录是核心配置。
第 2 条记录是否需要,需要根据实际 CDN 配置验证。
2. 配置回源地址
配置 CDN 回源到本地服务器。


回源配置说明:
GitLab:
https://gitlab.***.com
|
↓
CDN
|
↓
服务器443端口
|
↓
反向代理
|
↓
GitLab容器80端口Pages:
https://pages.***.com
|
↓
CDN
|
↓
服务器8881端口
|
↓
GitLab Pages HTTP服务3. 配置边缘证书(可选)
如果希望 CDN 节点直接通过 HTTPS 访问,需要配置边缘证书。

配置完成后:
- 用户 → 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:8822SSH端口独立转发,不经过CDN。
总结
该方案的核心思路:
- GitLab容器内部只负责HTTP服务;
- HTTPS统一交给CDN和反向代理处理;
- GitLab通过
X-Forwarded-*获取真实访问协议; - GitLab Pages使用独立端口,通过CDN暴露HTTPS;
- 避免CDN直接HTTP回源,提高安全性和兼容性。
最终实现:
- GitLab主站 HTTPS访问 ✅
- GitLab Pages通配符域名访问 ✅
- CDN统一HTTPS入口 ✅
- 源站无需维护多套证书 ✅