gitlab 前端通过一个nginx代理后,某天访问的时候发现nginx报502错误html
经查询发现是某用户认证失败,致使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 .
nginx
在gitlab.rb里找到下面配置,将ip加入白名单或者增长maxretrygit
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获取用户的真实ipredis
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'