问题描述
在 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