0%

Gitlab配置external_url

Gitlab 里有一个配置选项 external_url

顾名思义这里配置的是从外部机器访问 Gitlab 的链接,可以是域名或ip地址

在配置这个选项的时候需要注意一个问题,就是这个配置的是里 gitlab 最近的访问路径。

比如我们有如下一个结构

基于 Docker 容器的结构

访客 -> nginx 容器 -> gitlab 容器

此时,访客假如在浏览器输入网址https://gitlab.wudinaonao.com,浏览器将请求发送给 nginx 容器,nginx容器通过反向代理连接到 gitlab 容器

这个时候就要注意了,external_url 这个选项并不能设置为https://gitlab.wudinaonao.com(并不是绝对的)

为什么?

因为在上述结构里 https://gitlab.wudinaonao.com 并不是离 gitlab 最近的访问路径, nginx 通过反向代理向 gitlab 发出的请求才是离 gitlab 最近的链接.

例如, 如果我们通过 docker-compose 来配置 nginx 和 docker 镜像.

1
2
3
4
5
6
7
8
9
10
version: "3.1"
services:
Gitlab:
# 省略其他配置 ...

Nginx:
# 省略其他配置 ...
depends_on:
- Gitlab

在上述容器组中, Nginx 容器可以通过 Gitlab 来访问 Gitlab 容器, 可以在 Nginx 容器里使用ping命令测试ping gitlab

那么在这样的结构里, external_url的值就应当配置为http://Gitlab

并不是绝对的

为什么设置成http://Gitlab并不是绝对的, 因为通过 Nginx 反向代理时, 其实可以更改请求头的 host 选项!

只需要将 hostexternal_url 匹配即可

基于动态DNS的结构

访客 -> 路由器 -> 内网主机

如果 gitlab 主机假设在一个私网里, 我们通过端口映射的方式来访问, 这种情况下, 我们需要设置

external_url 的值为 内网主机的 ip 地址

详细来说, 假设我们的路由器对外有一个公网ip, 我们通过动态dns的方式绑定了一个域名 abc.com, 然后我们将内网里的gitlab主机端口暴露出去, 比如为 8080

那么此时我们可以通过 http:abc.com:8080 的方式来访问内网的 gitlab 主机吗 ?

并不可以.

是因为 abc.com 并不是距离 gitlab 最近的请求, 所以我们需要设置 external_url 的值为 内网主机的 ip 地址

此时才可以正常访问.

https://blog.csdn.net/atlasun/article/details/115749373