「GitLab」- 当前登录网络地址非用户的真实地址(Current sign-in IP)

更新日期:2021年01月11日

问题描述

在 GitLab / Admin Area / Users / <Username> / Current sign-in IP 中,显示的网络地址非当前用户的真实地址。

该笔记将记录:如何设置 GitLab 以使 Current sign-in IP 显示真实的网络地址。

解决方案

请求链路:Client => Nginx => Docker => Nginx within the Gitlab Container

第一步、修改 Nginx 配置

目的:使客户端的真实网络地址可以传递到下游,这通过保存在 X-Forwarded-For 字段实现。

为被 Client 请求的 Nginx 设置 X-Forwarded-For 头部:

location / {
    ....
    proxy_set_header    X-Forwarded-For $realip_remote_addr;
    ....
}

第二步、修改 gitlab.rb 配置

目的:1)使在 GitLab 中的 Nginx 读取到上游传递过来的客户端的真实网络地址,2)并传递给 GitLab 后端服务。

...
# 1)
nginx['real_ip_trusted_addresses'] = ['127.0.0.1','172.16.37.0/24']
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'
...

...
# 2)
nginx['proxy_set_headers'] = {
  "Host" => "$http_host_with_default",
  "X-Real-IP" => "$remote_addr",
  "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on",
  "Upgrade" => "$http_upgrade",
  "Connection" => "$connection_upgrade"
}
...

在 gitlab.rb 中,配置 nginx[''] 用于控制在 GitLab 中的 Nginx 的配置:
1)nginx['real_ip_header'],指示从 X-Forwarded-For 中读取客户端真实网络地址;
2)nginx['proxy_set_headers'].X-Forwarded-For,用于向后端传递真实的网络地址;

参考文献

Bundled nginx and set_real_ip_from? (#1153) · Issues · GitLab.org / omnibus-gitlab · GitLab
Current sign in IP always localhost (#3538) · Issues · GitLab.org / GitLab FOSS · GitLab
Module ngx_http_realip_module
NGINX settings | GitLab


ToC

问题描述

解决方案

第一步、修改 Nginx 配置

第二步、修改 gitlab.rb 配置

参考文献