2014-07-22 33 views
0

我通过Nginx + Unicorn使用Gitlab 7。一旦启用HTTP基本身份验证,git命令(如“git push”或“git pull”)停止工作。没有HTTP基本认证所有工作正常。我如何解决它?我需要启用HTTP基本身份验证,而不会对开发人员造成任何损害。 我的nginx的conf文件为gitlab:通过HTTP的Git命令基本身份验证

upstream gitlab { 
server unix:/home/git/gitlab/tmp/sockets/gitlab.socket; 
} 
server { 
    listen *:80 default_server; 
    server_name gitlab.delfit.com; 
    server_tokens off; 
    root /home/git/gitlab/public; 

    client_max_body_size 300m; 

    # individual nginx logs for this gitlab vhost 
    access_log /var/log/nginx/gitlab_access.log; 
    error_log /var/log/nginx/gitlab_error.log; 

    location/{ 
    # serve static files from defined root folder;. 
    # @gitlab is a named location for the upstream fallback, see below 
    try_files $uri $uri/index.html $uri.html @gitlab; 
    } 

    # if a file, which is not found in the root folder is requested, 
    # then the proxy pass the request to the upsteam (gitlab unicorn) 
    location @gitlab { 
    proxy_read_timeout 300; 
    proxy_connect_timeout 300; 
    proxy_redirect  off; 

    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host    $http_host; 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

# auth_basic "Restricted"; 
# auth_basic_user_file /home/git/gitlab/.htpasswd;  

    proxy_pass http://gitlab; 
    } 

    error_page 502 /502.html; 
} 

启用基本身份验证后的错误是:

[email protected]:~/git/myproject$ git push 
fatal: Authentication failed for 'http://gitlab.myorg.com/user/repo.git' 

提前感谢!

+0

你使用的是什么版本的'git'?用'git --version'获取它。当使用git将/ push到gitlab时,我面临一些问题<1.7.10 – PierreF

回答

0

所以你已经设法添加两层认证。一个在nginx层,然后Gitlab在你推/拉仓库时拥有它自己的。

下面是您创建的流程。当有人推送代码时,他们试图对nginx认证进行认证,而不是针对Gitlab。一旦用户通过nginx认证,他们将不得不对Gitlab进行认证。然后,您将通过gitlab进行身份验证,但这不会让您对nginx进行身份验证,因为HTTP只能保存一组凭据。

我个人只是让Gitlab的内置认证做它的工作。但是,如果你确实必须在nginx上进行身份验证,我看到两个选项。从Gitlab切换到SSH,并且不要使用HTTP来推送和拉取存储库。或者,在nginx中添加条件语句,以便在URL匹配{repo}.git或类似格式时不提示进行身份验证。但要警告,if is evil in nginx

+0

感谢您的回答。我真的需要2层保护我的gitlab网站。但我已经在使用SSH类型的拉和推。这就是为什么我完全没有想法,为什么请求通过HTTP服务器。 – fesia

+0

而不是使用'if'语句,您是否建议使用两个位置,一个用于匿名读取,另一个用于验证写入? –