如何通过使用用户/密码的NGINX通过HTTP服务GIT?

尽pipe所有的链接,我已经find了如何configurationgit / nginx来获得我的回购,我不能让他们的工作。

我遵循这个教程, Git仓库通过HTTP WebDAV与Nginx ,但用户/密码限制不起作用。 任何人都可以克隆存储库。

我来自一个使用SVN + Apache + DAV_SVN的configuration,一个用于密码的文件(由htpasswd创build)以及一个用于authz的文件。 我想用git + nginx来做同样的事情。 那可能怎么样?

谢谢你的帮助!

看看下面的文章, http://www.toofishes.net/blog/git-smart-http-transport-nginx/

它提供了一个示例nginx配置:

http { ... server { listen 80; server_name git.mydomain.com; location ~ /git(/.*) { # fcgiwrap is set up to listen on this host:port fastcgi_pass localhost:9001; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # export all repositories under GIT_PROJECT_ROOT fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /srv/git; fastcgi_param PATH_INFO $1; } } } 

这个功能是把位于/ git后面的repo传递给/usr/lib/git-core/git-http-backend 。 例如, http://git.mydomain.com/git/someapp someapp将指向someapp存储库。 这个回购将位于/srv/git/someapp/srv/git/someappfastcgi_param中所定义的,可以根据您的服务器进行更改。

这是非常有用的,您可以将HttpAuthBasicmodulee应用于nginx,以通过HTTP密码保护您的repo访问。

编辑:如果你缺少git-http-backend ,你可以在Ubuntu / Debian上或在基于RPM的平台上安装git-core软件包。看看git能在CENTOS 5.5上安装吗?

下面是Git over HTTP的完整配置,包括TLS加密,基本身份验证和GitWeb(一个非常简单的存储库查看器)。 我假设这个版本库的根在/ home / git。

 # Remove this block if you don't want TLS server { listen 80; server_name git.YOURDOMAIN.com; return 301 https://$host$request_uri; } server { listen 443 ssl; # Replace 443 ssl by 80 if you don't want TLS server_name git.YOURDOMAIN.com; root /usr/share/gitweb; # Remove if you don't want Gitweb error_log /home/git/nginx-error.log; access_log /home/git/nginx-access.log; # Remove ssl_* lines if you don't want TLS ssl_certificate /etc/letsencrypt/live/git.YOURDOMAIN.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.YOURDOMAIN.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # Remove auth_* if you don't want HTTP Basic Auth auth_basic "YOURDOMAIN Git"; auth_basic_user_file /etc/nginx/.htpasswd; # static repo files for cloning over https location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ { root /home/git/; } # requests that need to go to git-http-backend location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ { root /home/git/; fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param PATH_INFO $uri; fastcgi_param GIT_PROJECT_ROOT $document_root; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param REMOTE_USER $remote_user; include fastcgi_params; } # Remove all conf beyond if you don't want Gitweb try_files $uri @gitweb; location @gitweb { fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi; fastcgi_param PATH_INFO $uri; fastcgi_param GITWEB_CONFIG /etc/gitweb.conf; include fastcgi_params; } } 

你必须安装Git,Gitweb和FastCgiWrap:

 sudo apt-get install git gitweb fcgiwrap 

对于TLS,我使用Let's Encrypt免费证书。

 sudo letsencrypt certonly -d git.YOURDOMAIN.com --rsa-key-size 4096 

要访问Gitweb,只需浏览到git.YOURDOMAIN.com。 您还需要将其配置为设置存储库的根目录:

 sudo vim /etc/gitweb.conf 

为了获得HTTP基本身份验证,您必须使用htpasswd命令将用户添加到/etc/nginx/.htpasswd

 sudo apt-get install apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd username 

下一次运行该命令时,请删除-c开关,因为它只创建文件(Nginx在其配置目录中默认没有.htpasswd文件)。

如果你想要更复杂,功能强大的GitHub,请检查Gitlab 。