gitlab 前端经过一个nginx代理后,某天访问的时候发现nginx报502错误

经查询发现是某用户认证失败,导致gitlab为了安全把远程ip禁用掉了

./redis-cli keys '*' | grep 'rack::attack' 
cache:gitlab:rack::attack:allow2ban:ban:10.5.0.42
cache:gitlab:rack::attack:allow2ban:ban:10.5.0.46

临时解决办法为清掉redis里的改数据 ./redis-cli keys '*' | grep 'rack::attack' | xargs .

解决方法一:

在gitlab.rb里找到下面配置,将ip加入白名单或者增加maxretry

 gitlab_rails['rack_attack_git_basic_auth'] = {
   'enabled' => true,
   'ip_whitelist' => ["127.0.0.1"],
   'maxretry' => 10,
   'findtime' => 60,
   'bantime' => 3600
 }

解决方法二:

由于经过的前边的nginx反向代理,所以gitlab获取到的远程ip为nginx的ip,并非用户的真实ip 在gitlab.rb 里找到如下配置,将nginx的ip加入到real_ip_trusted_address,并且将real_ip_header修改为前端nginx自定义的header,这样gitlab就能通过自定义的header获取用户的真实ip

nginx['real_ip_trusted_addresses'] = ['10.5.0.46','10.5.0.42']
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'

参考: https://docs.gitlab.com/omnibus/settings/nginx.html